Java从集合创建数组

示例

java.util.Collection从集合创建数组的两种方法:

  • Object[] toArray()

  • <T> T[] toArray(T[] a)

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

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) 可以如下使用:

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

// 不需要使用正确的大小预先创建阵列。
//仅数组类型很重要。(如果大小错误,将使用一个新的数组
// 用相同的类型创建。)
String[] stringArray = set.toArray(new String[0]);  

// 如果您提供的数组大小与collection相同或更大,则它将
// 将使用集合值填充并返回(新数组
// 将不会分配)
String[] stringArray2 = set.toArray(new String[set.size()]);

它们之间的区别不仅仅是获得无类型结果与有类型结果。它们的性能也可能有所不同(有关详细信息,请阅读此性能分析部分):

  • Object[] toArray()用途矢量arraycopy,它比核对型快得多arraycopy中使用T[] toArray(T[] a)。

  • T[] toArray(new T[non-zero-size])需要在运行时将数组清零,T[] toArray(new T[0])而不需要。这种避免使得后者的呼叫比前者更快。此处进行详细分析:古代智慧的数组。

Java SE 8

从Stream引入了Java概念的Java SE 8+开始,可以使用Stream该集合产生的结果使用该Stream.toArray方法创建一个新的Array 。

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

示例从两个答案(1、2)获取,这些答案是在Java堆栈溢出时将“ ArrayList转换为'String []'”。