陣列與list之間的相互轉換
阿新 • • 發佈:2019-02-18
細節還是習慣性的記錄下來吧,不然每次都去查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,新增到陣列!!!
以上----------------------------------------------------