從集合建立陣列

java.util.Collection 中的兩個方法從集合中建立一個陣列:

Object[] toArray() 可以使用如下:

Version >= Java SE 5

Set<String> set = new HashSet<String>();
set.add("red");
set.add("blue");

// although set is a Set<String>, toArray() returns an Object[] not a String[]
Object[] objectArray = set.toArray();

<T> T[] toArray(T[] a) 可以使用如下:

Version >= Java SE 5

Set<String> set = new HashSet<String>();
set.add("red");
set.add("blue");

// The array does not need to be created up front with the correct size.
// Only the array type matters. (If the size is wrong, a new array will
// be created with the same type.)
String[] stringArray = set.toArray(new String[0]);  

// If you supply an array of the same size as collection or bigger, it
// will be populated with collection values and returned (new array
// won't be allocated)
String[] stringArray2 = set.toArray(new String[set.size()]);

它們之間的區別不僅僅是具有無型別和型別的結果。它們的效能也可能不同(有關詳細資訊,請閱讀此效能分析部分 ):

  • Object[] toArray() 使用向量化的 arraycopy,這比 T[] toArray(T[] a) 中使用的經過型別檢查的 arraycopy 要快得多。
  • T[] toArray(new T[non-zero-size]) 需要在執行時將陣列清零,而 T[] toArray(new T[0]) 則不需要。這種避免使後者比前者更快。詳細分析: 古代智慧陣列

Version >= Java SE 8

從引入了 Stream 概念的 Java SE 8+開始,可以使用集合生成的 Stream,以便使用 Stream.toArray 方法建立新的陣列。

String[] strings = list.stream().toArray(String[]::new);

從兩個答案採取(實施例 12 ),以轉換“的 ArrayList 到‘字串[]’中的 Java 堆疊溢位。