使用toArray将集合转储到数组

时间:2014-03-16 02:33:32

标签: java arrays collections

我正在阅读来自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]做什么以及如果我们删除它会有什么区别?

1 个答案:

答案 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()]);