1. 程式人生 > >陣列與list之間的相互轉換

陣列與list之間的相互轉換

細節還是習慣性的記錄下來吧,不然每次都去查API挺耗時間的!!

一、陣列轉成list

第一種方式:

// 初始化陣列
String[] arr = new String[] { "1", "2", "3" };

// 待轉換成的list
List<String> list = new ArrayList<String>();

// 通過Collections轉換
Collections.addAll(list, arr);

第二種方式:
// 初始化陣列
String[] arr = new String[] { "1", "2", "3" };

// 通過Arrays轉換成list
List<String> list = Arrays.asList(arr);

注意:Arrays.asList()返回一個受指定陣列支援的固定大小的列表。所以不能做Add、Remove等操作。

例如:接上面     list.add("4");         執行時則會報異常:java.lang.UnsupportedOperationException

如果想對上述轉換後的list再進行add等操作,可以如下:

// 通過list建構函式轉換成可操作的list(add等)
List<String> list = new ArrayList<String>(Arrays.asList(arr));

第三種方式(中規中矩的操作,不推薦):

迴圈陣列,把每個元素新增到list中!!!

二、List 轉陣列

第一種方式:

// 初始化list
List<String> list = new ArrayList<String>();

// 新增資料
list.add("1");
list.add("2");
list.add("3");

// 通過toArray轉換
Object[] arr = list.toArray();

注意:用list.toArray()方法返回的是個Object型別的陣列,很多人在這裡想要得到一個String[]型的陣列,就直接像這樣強轉了:

String[] arr = (String[])list.toArray();   

這種寫法是錯誤的,沒有這樣的強制轉法,編譯時不會報錯,但是執行時會報不能轉換的異常:

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;

解決上面的問題有兩種方式:

1.迴圈Object陣列,單個轉換

2.改為API的實現方法

// 先定義一個數組
String[] arr = new String[list.size()];

// 然後再通過toArray轉換
list.toArray(arr);
第二種方式:

迴圈遍歷list,新增到陣列!!!

以上----------------------------------------------------