为什么需要为Set.toArray指定一个返回数组的数组?

时间:2012-08-09 23:56:47

标签: java arrays string collections

我对Set(和其他集合)中toArray(T [])方法的设计和正确使用感到困惑。如果我有一个字符串集,为什么我需要指定一个大小为0的String数组,如果该方法要分配一个新的String数组呢?

Set<String> stringSet = new Set<String>();
// bla bla bla, insert Strings to set
String[] array = stringSet.toArray(new String[0]);

有没有更好的方法来获取数组而不分配额外的数组或显式类型转换?

2 个答案:

答案 0 :(得分:2)

该参数用于检测要创建的数组的类型。

你可能会争辩,为什么JVM不使用stringSet的泛型类型参数来检测类型。答案是在运行时由于类型擦除而不知道泛型类型参数,即Set&lt; String&gt;。编译后变为Set。

toArray(new Object [0])在功能上与toArray()完全相同。

如果集合适合指定的数组,则返回其中。否则,将使用指定数组的运行时类型和此set的大小分配新数组。

答案 1 :(得分:0)

如果您使用的是集合,则可能不知道set(或任何其他集合)所具有的确切条目数。如果您从一开始就知道条目数,为什么不使用数组而不是集合?

我看到它的方式,toArray()方法是一种使用您不知道先验它将拥有多少条目的集合创建数组的简单方法。 / p>