我正在尝试将Set转换为数组.
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);
Run Code Online (Sandbox Code Playgroud)
它工作正常.但我不理解其意义new String[0]在String[] a = s.toArray(new String[0]);.
我的意思是最初我在尝试String[] a = c.toArray();,但它不会工作.为什么需要new String[0].
如果它足够大,它就是要存储集合元素的数组; 否则,为此目的分配相同运行时类型的新数组.
Object [] toArray(),返回一个Object[]无法转换为String[]或任何其他类型数组.
T [] toArray(T [] a),返回一个包含该集合中所有元素的数组; 返回数组的运行时类型是指定数组的运行时类型.如果集合适合指定的数组,则返回其中.否则,将使用指定数组的运行时类型和此set的大小分配新数组.
如果你查看实现代码(我是从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;
}
Run Code Online (Sandbox Code Playgroud)