首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java Collections toArray() 方法正確用法與陷阱避坑指南

     編輯:程式設計綜合問答

常見誤區

嘗試直接將 Set<Byte[]> 或 List<String> 轉為具體型別陣列(如 byte[][]、String[])時,若呼叫無參數 toArray() 會得到 Object[],強制轉型拋出 ClassCastException。

正確姿勢:帶參數重載

// 正確:傳入「目標型別、長度為 0」的陣列
String[] strArray = stringList.toArray(new String[0]);

// 亦可傳入預估大小陣列(避免擴容),Java 11+ 建議用 0 長度
Byte[][] byteArrays = byteSet.toArray(new Byte[0][]);

原理說明

  • toArray(T[] a):若傳入陣列長度足夠,直接填入並返回該陣列;否則以 Arrays.copyOf 建立新陣列返回。
  • 傳入 new String[0] 可讓 JVM 精確推導元件型別,產生最緊湊陣列,效能最佳(JIT 會優化配置)。

進階場景:基本型別集合轉基本型別陣列

Java 集合無法直接儲存基本型別(int、byte 等),需用 Stream API 或第三方庫:

// List → int[]
int[] primitive = list.stream().mapToInt(Integer::intValue).toArray();

// Set → byte[] (Guava)
byte[] bytes = Bytes.toArray(byteSet);

效能建議

  • 避免在熱路徑頻繁呼叫 toArray,優先使用集合迭代或 Stream 處理。
  • 若確知大小,預先配置目標陣列 new T[size] 可減少一次複製。
  • 大量資料轉換考慮 Arrays.copyOf 或 System.arraycopy 手動控制。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved