1. 程式人生 > 實用技巧 >Java> List與陣列之間相互轉換

Java> List與陣列之間相互轉換

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;