Java 使用toArray将集合转储到阵列
我正在阅读有关java集合的内容,其中包括: 假设Java 使用toArray将集合转储到阵列,java,arrays,collections,Java,Arrays,Collections,我正在阅读有关java集合的内容,其中包括: 假设c是只包含字符串的已知类型(可能是因为c属于Collection)。以下代码段将c的内容转储到新分配的字符串数组中,该字符串的长度与c中的元素数相同 ps.c是一个集合 我的问题是,为什么我们需要将新字符串[0]传递给c.toArray?传递新字符串[0]有什么作用?如果我们删除它有什么区别?最好使用公共T[]数组(T[]a),因为您将获得T[]类型,而不是原始对象类型。这是因为Java无法在运行时创建特定类型的数组,而不将类型直接传递给方法,实
c
是只包含字符串的已知类型(可能是因为c
属于Collection
)。以下代码段将c
的内容转储到新分配的字符串数组中,该字符串的长度与c
中的元素数相同
ps.c
是一个集合
我的问题是,为什么我们需要将新字符串[0]
传递给c.toArray
?传递新字符串[0]
有什么作用?如果我们删除它有什么区别?最好使用公共T[]数组(T[]a)
,因为您将获得T[]
类型,而不是原始对象类型。这是因为Java无法在运行时创建特定类型的数组,而不将类型直接传递给方法,实际上a.getClass()
用于获取Class
引用(因为类型擦除)
此外,传递一个新的T[0]
将导致数组的双重分配。您可以直接传递大小正确的数组,以避免任何开销:
String[] a = c.toArray(new String[c.size()]);
可能的副本。另请参见:您只需传入c.size(),它正在检查答案中提到的源代码。
String[] a = c.toArray(new String[c.size()]);