Java> List與陣列之間相互轉換
阿新 • • 發佈:2020-12-11
List一般包含兩種儲存結構:順序儲存ArrayList和鏈式儲存LinkedList。
List與陣列之間如何相互轉行呢?
陣列轉List
1. 利用遍歷陣列每個元素,將元素一個個加入List
最通用的方法,適合任意基本元素型別和語言。
示例:
List<Integer> list = new ArrayList<>();
int[] a = new int[]{3,8,20,7,11,25};
for (Integer d: a) {
list.add(d);
}
list.foreach(System.out::println);
2. 利用陣列工具類Arrays的內建方法asList
注意Arrays.asList(array)是Arrays的一個內部類Arrays.ArrayList的方法,並非我們熟知的java.util.List或java.util.ArrayList,而且返回的是一個List的檢視,只能用於讀取資料,不能修改或刪除資料。
如果需要修改,需要在此基礎上新建一個通用的List。
/* * 物件陣列轉化為List */ Integer[] a = new Integer[]{3,8,20,7,11,25}; List<Integer> list = new ArrayList<Integer>(Arrays.asList(a)); /* * 基本型別陣列先用流對每個元素裝箱, 轉化為對應包裝型別陣列 * 再通過Arrays.asList轉化為列表檢視 * 通過新建List的構造器, 新建列表List */ int[] b = new int[]{3,8,20,7,11,25}; Integer[] boxB = Arrays.stream(b).boxed().toArray(Integer[]::new); List<Integer> list = new ArrayList<Integer>(Arrays.asList(boxB));
3. 利用集工具類Collections.addAll方法
直接利用Collections的add方法,將陣列所有元素加入list中。要求陣列必須是物件型別陣列,不能是基本型別陣列。如果是基本型別陣列,需要先轉換成物件型別陣列。
這種方法本質上,跟方法1相同,都是遍歷陣列元素,然後加入list。
Integer[] a = new Integer[]{3,8,20,7,11,25};
List<Integer> list = new ArrayList<>();
Collections.addAll(list, a);
List轉陣列
1. 遍歷List元素,將元素填入陣列
List<Integer> list = new ArrayList<>();
Collections.addAll(new Integer[]{1,2,3,4,5});
int[] a = new int[list.size()];
int i = 0;
for (Integer d: list) {
a[i] = d;
i ++
}
for (int i = 0; i < a.length; i ++) {
System.out.println(a[i]);
}
2. 利用List的toArray方法
利用List的toArray方法,將當前list轉化為Object陣列,再講Object陣列轉化為對應型別陣列,比如Object[] -> Integer[] -> int[]
// 構建列表list, 並插入資料用於測試
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 5; i++){
list.add(i);
}
// List轉Object[]
Object[] objs = list.toArray();
// Object[] 轉Integer[]
Integer[] nums = Arrays.stream(objs).toArray(Integer::new);
// Integer[] 轉int[]
int[] arr = Arrays.stream(nums).mapToInt(Integer::valueOf).toArray();
3. 利用List流的mapToInt方法
// 構建列表list, 並插入資料用於測試
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 5; i++){
list.add(i);
}
int[] arr = list.stream().mapToInt(Integer::intValue).toArray;
// 也可以用下面的語句
int[] arr = list.stream().mapToInt(Integer::valueOf).toArray;