gpt4 book ai didi

java - 传递零大小的数组,保存分配?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:28:12 28 4
gpt4 key购买 nike

The Well-Grounded Java Developer 第 114 页的代码示例中, 最后一行:

Update[] updates = lu.toArray(new Update[0]);

包含注释:传递零大小的数组,保存分配

List<Update> lu = new ArrayList<Update>();
String text = "";
final Update.Builder ub = new Update.Builder();
final Author a = new Author("Tallulah");

for (int i=0; i<256; i++) {
text = text + "X";
long now = System.currentTimeMillis();
lu.add(ub.author(a).updateText(text).createTime(now).build());
try {
Thread.sleep(1);
} catch (InterruptedException e) {
}
}

Collections.shuffle(lu);
Update[] updates = lu.toArray(new Update[0]);

这个节省的分配到底是多少?

List#toArray(T[] a) 的 javadoc提及:

If the list fits in the specified array, it is returned therein. Otherwise, a new array is allocated with the runtime type of the specified array and the size of this list.

这是我记得的:如果您传递给 toArray(T[] a) 的数组不能容纳列表中的所有内容,则会分配一个新数组。说白了,列表中有 256 个元素,不能放入大小为 0 的数组,因此必须在方法内部分配一个新数组,对吗?

那么这个注释不正确吗?还是有别的意思?

最佳答案

Plainly, there are 256 elements in the list, which cannot fit in an array of size 0, therefore a new array must be allocated inside the method, right?

是的。


你可以使用

 private static final Update NO_UPDATES = { }

lu.toArray(NO_UPDATES);

然而,只有当您希望列表的长度通常为 0 时,这才会有所帮助。

通常,我会采用与 fge 相同的方法

 lu.toArray(new Update[lu.size()]);

在您的具体情况下,您可以提前知道尺寸,这样您就可以做

Update[] updates = new Update[256];
String text = "";
final Update.Builder ub = new Update.Builder();
final Author a = new Author("Tallulah");

long now = System.currentTimeMillis();
for (int i=0; i<updates.length; i++)
updates[i] = ub.author(a).updateText(text += 'X').createTime(now++).build();

Collections.shuffle(Arrays.asList(updates));

关于java - 传递零大小的数组,保存分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14280631/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com