java.util.Collection从集合创建数组的两种方法:
Object[] toArray()
<T> T[] toArray(T[] a)
Object[] toArray() 可以如下使用:
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) 可以如下使用:
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])而不需要。这种避免使得后者的呼叫比前者更快。此处进行详细分析:古代智慧的数组。
从Stream引入了Java概念的Java SE 8+开始,可以使用Stream该集合产生的结果使用该Stream.toArray方法创建一个新的Array 。
String[] strings = list.stream().toArray(String[]::new);
示例从两个答案(1、2)获取,这些答案是在Java堆栈溢出时将“ ArrayList转换为'String []'”。