Set toArray() 方法中需要 new String[0]

问题描述 投票:0回答:3

我正在尝试将集合转换为数组。

Set<String> s = new HashSet<String>(Arrays.asList("mango","guava","apple"));
String[] a = s.toArray(new String[0]);
for(String x:a)
      System.out.println(x);

而且效果很好。但我不明白

new String[0]
String[] a = s.toArray(new String[0]);
的意义。

我的意思是最初我正在尝试

String[] a = c.toArray();
,但它不起作用。为什么需要
new String[0]

java set
3个回答
10
投票

它是要存储 Set 元素的数组(如果它足够大);否则,将为此目的分配一个相同运行时类型的新数组。

Object[] toArray(),返回一个

Object[]
,不能转换为
String[]
或任何其他类型的数组。

T[] toArray(T[] a) , 返回一个包含该集合中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。如果该集合适合指定的数组,则将其返回到其中。否则,将使用指定数组的运行时类型和该集合的大小分配一个新数组。

如果你仔细阅读实现代码(我发布了来自OpenJDK的代码),你就会很清楚了:

 public <T> T[] toArray(T[] a) {
     if (a.length < size)
     // Make a new array of a's runtime type, but my contents:
     return (T[]) Arrays.copyOf(elementData, size, a.getClass());
     System.arraycopy(elementData, 0, a, 0, size);
     if (a.length > size)
         a[size] = null;
    return a;
 }

5
投票

该参数是 Java 泛型系统中许多众所周知的限制之一的结果。基本上,需要该参数才能返回正确类型的数组。


0
投票

.toArray(new String[0]) 将集合元素转换为字符串数组。 new String[0] 是用来表示数组的类型,而不是表示集合的大小。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.