我正在阅读来自The Collection Interface的java集合,内容如下:
假设已知
c
仅包含字符串(可能因为c
的类型为Collection<String>
)。以下代码段将c
的内容转储到新分配的String
数组中,其长度与c
中的元素数相同。
String[] a = c.toArray(new String[0]);
PS。 c
是一个集合
我的问题是,为什么我们需要将new String[0]
传递给c.toArray
?通过new String[0]
做什么以及如果我们删除它会有什么区别?
答案 0 :(得分:1)
public <T> T[] toArray(T[] a)
是首选,因为您将获得T[]
类型而不是原始对象类型。这是因为Java无法在运行时创建特定类型的数组而不将类型直接传递给方法,实际上a.getClass()
用于获取Class<T[]>
引用(因为类型擦除)。
另外,传递new T[0]
将导致数组的双重分配。您可以直接传递正确大小的数组以避免任何开销:
String[] a = c.toArray(new String[c.size()]);