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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM