在Set toArray()方法中需要新的String
我正在尝试将Set转换为数组。
Set s = new HashSet(Arrays.asList("mango","guava","apple")); String[] a = s.toArray(new String[0]); for(String x:a) System.out.println(x);
它工作正常。 但我不明白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[] 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; }
该参数是Javagenerics系统中许多众所周知的限制之一的结果。 基本上,需要该参数才能返回正确类型的数组。
- 如何将C语言结构定义转换为Java代码?
- 当两个不同的wicket应用程序共享通用function时,如何重用代码
- Spring中的Pageable和@Param数据JpaRepository方法问题
- Spring JPA(Hibernate)没有类型的限定bean:javax.persistence.EntityManagerFactory
- 从URLConnection读取二进制文件
- 在Java中有没有办法找到传递给函数的变量的名称?
- 构建WAR包时出现Maven错误(web.xml丢失..?)
- 对doFinal的一些调用有badPaddingException。 不是全部。 相同的输入
- 如何在一次迭代中走到奇异链表的中间?