天天看點

Java中數組Array和List對象的互相轉換

# 從一個錯誤說起

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);