【发布时间】:2012-08-09 23:56:47
【问题描述】:
我对 Set(和其他集合)中 toArray(T[]) 方法的设计和正确使用感到困惑。如果我有一个字符串集合,如果方法要分配一个新的字符串数组,为什么我需要指定一个大小为 0 的字符串数组?
Set<String> stringSet = new Set<String>();
// bla bla bla, insert Strings to set
String[] array = stringSet.toArray(new String[0]);
有没有更好的方法来获取数组而不分配额外的数组或显式类型转换?
【问题讨论】:
-
最好写:
stringSet.toArray(new String[stringSet.size()]);以避免不必要的对象创建。 -
@assyliass 我真的怀疑虚拟机会“强调”额外的
new String[0](它实际上会非常有效地处理它,因为它是一个短暂的对象),这是为了简单起见..如果有 any 测试用例可以另外争论,我真的会感到惊讶,除非 same 数组被重新使用。 (复制操作本身比为任何可观的n创建一个新的空数组“工作量更大”,并且随着n的增长,额外的分配变得越来越不重要。)
标签: java arrays string collections