首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 數組與 List 互轉完全指南:toArray 與 asList 核心用法詳解

     編輯:Java 相關知識

集合與數組轉換兩大核心 API

Java 開發中數組與 List 互轉是高頻操作,掌握 Collection.toArray() 和 Arrays.asList() 的正確姿勢,能避免常見坑點(如型別不匹配、固定長度限制)。

List → 數組:toArray(T[] a) 正確用法

List<String> list = new ArrayList<>();
list.add("1");
list.add("2");

// 關鍵:傳入「目標型別的零長度數組」或「精確長度數組」
String[] arr = list.toArray(new String[0]);  // 推薦:JVM 優化零長度數組
// 或
String[] arr = list.toArray(new String[list.size()]);

避坑指南:

  • 不要用 toArray() 無參版本,返回 Object[] 需強轉,易拋 ClassCastException。
  • 傳入數組長度 < list.size() 時,JVM 會重新分配同型別新數組(性能略有損耗)。
  • 傳入數組長度 > list.size() 時,多餘位置會被置 null(可用於判斷長度)。

數組 → List:Arrays.asList() 陷阱與最佳實踐

String[] arr = {"1", "2"};
List<String> list = Arrays.asList(arr);

核心特性:

  • 返回固定長度 List,底層數組共享(修改 List 元素會反映到數組)。
  • 不支援 add/remove/clear,操作會拋 UnsupportedOperationException。
  • 僅適用於引用型別數組,基本型別數組(如 int[])會被當作單個元素,生成 List<int[]>。

可變長度 List 創建正確姿勢

// 方案一:ArrayList 構造函數複製(推薦)
List<String> mutableList = new ArrayList<>(Arrays.asList(arr));

// 方案二:Stream API(Java 8+)
List<String> mutableList = Arrays.stream(arr).collect(Collectors.toList());

// 方案三:Collections.addAll
List<String> mutableList = new ArrayList<>();
Collections.addAll(mutableList, arr);

基本型別數組特殊處理

int[] primitiveArr = {1, 2, 3};

// 錯誤:List list = Arrays.asList(primitiveArr);

// 正確:手動裝箱或 Stream
List<Integer> list = Arrays.stream(primitiveArr).boxed().collect(Collectors.toList());
// 或 Apache Commons Lang
// List list = ArrayUtils.toObject(primitiveArr);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved