假设我有一个集合(LinkedList)。
Collection<String> list = new LinkedList<>();
for (int i = 0; i < 1_000_000; i++) {
String randomString = RandomStringUtils.random(i);
list.add(randomString);
}
Object[] objects = list.toArray();
当我调用toArray
方法时强制我的应用创建一个新数组。例如,toArray
的LinkedList实现看起来像这样:
public Object[] toArray() {
Object[] result = new Object[size];
int i = 0;
for (Node<E> x = first; x != null; x = x.next)
result[i++] = x.item;
return result;
}
是否可以从集合中检索数组而无需为数组分配新内存?
答案 0 :(得分:0)
是否可以从集合中检索数组而无需为数组分配 new 内存?
(强调我的)
您可以重复使用预先分配的数组:
Object[] arr = new Object[1_000_000];
然后通过调用toArray(T[])
重载多次使用相同的数组,避免重新分配数组:
list.toArray(arr);
需要注意的是arr
必须至少是集合的大小;否则,将分配并返回相同元素类型的新数组:
Object[] correctSizedArray = list.toArray(wronglySizedArray);
答案 1 :(得分:0)
如果参数数组不足以容纳所有条目,则只会创建一个新数组:
{{1}}