Collection。 toArray 我们使用上述方法将List<String>
对象转换为等效的String[]
。Collection.toArray()的正确语法是什么?
List<String> foos = new ArrayList<String>();
// foos.toArray(new String[0]);
// foos.toArray(new String[foos.length]);
这将是正确的方法来使用,以将其转换成数组。
Collection。 toArray 我们使用上述方法将List<String>
对象转换为等效的String[]
。Collection.toArray()的正确语法是什么?
List<String> foos = new ArrayList<String>();
// foos.toArray(new String[0]);
// foos.toArray(new String[foos.length]);
这将是正确的方法来使用,以将其转换成数组。
这一个:
foos.toArray(new String[foos.size()]);
是正确的使用。如果您给toArray
一个太短的数组以适合列表,toArray
将分配一个新数组,而不是将元素存储在您提供的数组中。这意味着Java将分配两个数组而不是一个,这样会浪费几个时钟周期。
它是foos.size() –
@Maurice:是的,这是正确的。我刚刚从问题中复制了代码... –
如果你看到两个函数的签名,你会清楚地看到最后的区别。
Object[] toArray();
返回的数组将保持“安全”,因为此集合不会引用它。 (换句话说,即使该集合由数组支持,该方法也必须分配一个新数组)。调用者可以自由修改返回的数组。
此方法充当基于数组和基于集合的API之间的桥梁。
<T> T[] toArray(T[] a);
a
到其中此集合中的元素将被存储,如果它是足够大的阵列;否则,将为此分配一个相同运行时类型的新数组。
所以,我应该使用foos.length,正确吗? – Joe
这一切都取决于你正在工作的集合。在'ArrayList'中最好传递Length。但在'LinkedList'中它不是必需的。 –
但我会建议你应该通过它的长度。 –
String array[] = foos.toArray(new String[foos.size()]);
注意,它也将与新的字符串工作[0],但该阵列将需要被重新分配,如果foos.size()> 0
foos.toArray(新的String [foos.length] );似乎更好... – doNotCheckMyBlog