java數組tolist
❶ java 怎麼把list轉換成數組
ArrayList<String> list=new ArrayList<String>();
String strings[]=(String [])list.toArray();
這樣寫代碼個人覺得應該沒什麼問題,編譯也沒有問題。可是具體運行的時候報異常,如下:Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object;
但是這么寫是沒有問題的:
ArrayList<String> list=new ArrayList<String>();
String strings[]=new String[list.size()];
for(int i=0,j=list.size();i<j;i++){
strings[i]=list.get(i);
}
對於這個現象我們可以這么解釋:Java中允許向上和向下轉型,但是這個轉型是否成功是根據Java虛擬機中這個對象的類型來實現的。Java虛擬機中保存了每個對象的類型。而數組也是一個對象。數組的類型是[Ljava.lang.Object。把[Ljava.lang.Object轉換成[Ljava.lang.String是顯然不可能的事情,因為這里是一個向下轉型,而虛擬機只保存了這是一個Object的數組,不能保證數組中的元素是String的,所以這個轉型不能成功。數組裡面的元素只是元素的引用,不是存儲的具體元素,所以數組中元素的類型還是保存在Java虛擬機中的。
根據上面的解釋,我們可以把這個問題歸納到下面這個模型:
Object objs[]=new Object[10];
String strs[]=(String[])objs;
這樣子和剛才上面編譯錯誤是一樣的。如果我們修改一下這個代碼,如下:
String strs[]=new String[10];
Object objs[]=strs;
這樣子就可以編譯通過了。所以這個問題我們可以歸結為一個Java轉型規則的問題。下面談一下Java數組對范型的支持問題。
JDK5中已經有了對范型的支持,這樣可以保證在集合和Map中的數據類型的安全,可是,List的toArray方法返回的竟然是Object []讓人很迷惑。個人感覺應該可以根據范型,直接返回相應的T []。仔細看了一下JDK的發現List轉化為array有兩個方法:
public Object[] toArray();
這個方法把List中的全部元素返回一個相同大小的數組,數組中的所有元素都為Object類型。
public <T> T[] toArray(T[] a);
這個方法把List中的全部元素返回一個相同大小的數組,數組中的所有元素都為T類型。
List如此設計是因為Java編譯器不允許我們new范型數組。也就是說你不能這么定義一個數組:
T arr=new T[size];
但是你卻可以用T[]來表示數組,而且可以把數組強制轉化為T[]。比如List中的public <T> T[] toArray(T[] a)是這么實現的:
public <T> T[] toArray(T[] a) {
if (a.length < size)
a = (T[])java.lang.reflect.Array.
newInstance(a.getClass().getComponentType(), size);
System.array(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
從上面代碼中可以看到,因為你不知道這個數組的類型,你必須通過反射機制創建這個數組(a.getClass().getComponentType()方法是取得一個數組元素的類型)。
最終,List轉換為Array可以這樣處理:
ArrayList<String> list=new ArrayList<String>();
String[] strings = new String[list.size()];
list.toArray(strings);
反過來,如果要將數組轉成List怎麼辦呢?如下:
String[] s = {"a","b","c"};
List list = java.util.Arrays.asList(s);
❷ java 為什麼 數組轉list
都是集合,看你如何使用,沒什麼可轉的,要不就是new數組,遍歷list一個一個放進去
❸ Java數組排列問題:輸入一個數組,位數由小到大排列,相同位數時由大到小排列。
int[]i=newint[];
//給i賦值
for(intj=0;j<i.length-1;j++){
for(intk=0;k<i.length;k++){
if(i[j].toString().length()>i[k].toString().length()){
//按位數排序
}
if(i[j].toString().length()==i[k].toString().length()){
//按大小排序
}
}
}
差不多就是這個思路吧
❹ java 怎麼把數組轉為list
1.List轉換成為數組。(這里的List是實體是ArrayList)
調用ArrayList的toArray方法。
toArray
public <T> T[] toArray(T[]
a)返回一個按照正確的順序包含此列表中所有元素的數組;返回數組的運行時類型就是指定數組的運行時類型。如果列表能放入指定的數組,則返回放入此列表元
素的數組。否則,將根據指定數組的運行時類型和此列表的大小分配一個新的數組。
如果指定的數組能容納列表並有剩餘空間(即數組的元素比列表的多),那麼會將數組中緊跟在集合末尾的元素設置為 null。這對確定列表的長度很有用,但只 在調用方知道列表中不包含任何 null 元素時才有用。
指定者:
介面 Collection<E> 中的 toArray
指定者:
介面 List<E> 中的 toArray
覆蓋:
類 AbstractCollection<E> 中的 toArray
參數:
a - 要存儲列表元素的數組,如果它足夠大的話;否則,它是一個為存儲列表元素而分配的、具有相同運行時類型的新數組。
返回:
包含列表元素的數組。
拋出:
ArrayStoreException - 如果 a 的運行時類型不是此列表中每個元素的運行時類型的超類型。
具體用法:
List list = new ArrayList();
list.add("1");
list.add("2");
final int size =list.size();
String[] arr = (String[])list.toArray(new String[size]);
2.數組轉換成為List。
調用Arrays的asList方法.
asList
public static <T>
List<T> asList(T... a)返回一個受指定數組支持的固定大小的列表。(對返回列表的更改會「直寫」到數組。)此方法同
Collection.toArray 一起,充當了基於數組的 API 與基於 collection 的 API
之間的橋梁。返回的列表是可序列化的,並且實現了 RandomAccess。
此方法還提供了一個創建固定長度的列表的便捷方法,該列表被初始化為包含多個元素:
List stooges = Arrays.asList("Larry", "Moe", "Curly");
參數:
a - 支持列表的數組。
返回:
指定數組的列表視圖。
另請參見:
Collection.toArray()
具體用法:
String[] arr = new String[] {"1", "2"};
List list = Arrays.asList(arr);
❺ java 怎麼將jsonarray轉換成list
jsonarray轉換成list代碼如下:
public class JsonTest {
/**
* @param args
*/
public static void main(String[] args) {
// 轉換方法1
JSONArray array = JSONArray.fromObject("[{'name':'hehe','age':22}]");
List<Person> list = JSONArray.toList(array, Person.class);// 過時方法
System.out.println(list.get(0).getName());
// 轉換方法2
List<?> list2 = JSONArray.toList(array, new Person(), new JsonConfig());//參數1為要轉換的JSONArray數據,參數2為要轉換的目標數據,即List盛裝的數據
Person person = (Person) list2.get(0);
System.out.println(person.getAge());
}
}
❻ java中數組如何轉換成List
//小例子
//這里注意的是,不能是基本類型,必須是包裝類Byte[]可以。
publicclassDemo{
publicstaticvoidmain(String[]args)throwsException{
String[]arr={"asd","sd","df"};
Listlist=Arrays.asList(arr);
System.out.println(list);
}
}
❼ java實現把List的值放入一個數組中
int currentSize = out_list.size();
Object[] ary = {out_list.get(currentSize -1),out_list.get(currentSize -2),out_list.get(currentSize -3)};
就行了
❽ java怎麼把list轉成數組
publicstaticvoidlistToarray(){List<String>list=newArrayList<String>();list.add("a");list.add("b");list.add("c");list.add("d");list.add("e");String[]arr=(String[])list.toArray(newString[list.size()]);for(inti=0;i<arr.length;i++){System.out.println(arr[i]);}}
❾ 關於java集合的一個問題,怎麼把一個數組添加到List集合
在第10行定義list的時候類型定義為數組類型就行。
ArrayList<int[]> list=new ArrayList<>();
如果list是按bean對象存,則對象要改變:之前List對象存2個屬性:DepartID,num,添加後的對象有3個屬性:DepartID,num,dpsNum,所以要定義新的List對象來存兩個List的結果。(見下面代碼,已調通,1個main類,3個對象類)。
如果list是按string存而非bean對象,則for循環遍歷list1後,將list2字元串拼接到list1末尾,再覆蓋進list1對應結果中就行,list1.set(index,list1.get(index)+list2.get(index)),類似這句,沒調試過。
(9)java數組tolist擴展閱讀:
Java中的集合類可以分為兩大類:一類是實現Collection介面;另一類是實現Map介面。
Collection是一個基本的集合介面,Collection中可以容納一組集合元素(Element)。
Java提供了對象的數種保存方式,除了內置的數組以外,其餘的稱為集合類。為了使程序方便地存儲和操縱數目不固定的一組數據,JDK中提供了Java集合類,所有Java集合類都位於Java.util包中,與Java數組不同,Java集合不能存放基本數據類型數據,而只能存放對象的引用。
❿ java怎麼將數組轉化為list
1. String[] userid = {"aa","bb","cc"};List userList = new ArrayList();Collections.addAll(userList, userid);2. String[] userid = {"aa","bb","cc"};List userList = Arrays.asList(userid);3. 循環操作數組再add 望採納。