# 從一個錯誤說起
ArrayList<String> list=new ArrayList<String>();
String strings[]=(String [])list.toArray();
編譯報錯,覺得很迷惑,因為有如下2個類似的方法
JDK5中已經有了對範型的支援,這樣可以保證在集合和Map中的資料類型的安全,可是,List的toArray方法傳回的竟然是Object []讓人很迷惑。個人感覺應該可以根據範型,直接傳回相應的T []。
public Object[] toArray();
這個方法把List中的全部元素傳回一個相同大小的數組,數組中的所有元素都為Object類型。
public <T> T[] toArray(T[] a);
這個方法把List中的全部元素傳回一個相同大小的數組,數組中的所有元素都為T類型。
注意:為什麼不能根據範型,直接傳回相應的T []? 因為不能向下轉型
最終,List轉換為數組,應該如下
List<String> list=new ArrayList<>();
list.add("zheng");
list.add("ze");
list.add("zhou");
String[] strarray= new String[list.size()]; //最重要,不能遺漏,預先申請好數組空間
list.toArray(strarray);
for (int i=0; i<strarray.length; i++) {
System.out.println(strarray[i]);
}
數組轉換為List, Arrays.asList
而且int[]數組轉換要注意,必須聲明為Integer[]數組
Integer[] nums = {4,7,1,9}; //這裡如果寫為int[] 下面那句就報錯了
List<Integer> ls = Arrays.asList(nums);