0

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

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

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

4

2 回答 2

2

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

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

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

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

于 2012-08-10T00:01:59.103 回答
0

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

在我看来,该方法是一种使用集合创建数组的简单方法,您事先toArray()不知道它将有多少条目。

于 2012-08-10T00:21:39.903 回答