在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提到:
如果列表适合指定的数组,则在其中返回。否则,将使用指定数组的运行时类型和此列表的大小分配一个新数组。
这是我记得的:如果您传递给的数组toArray(T[] a)
不能适合列表中的所有内容,则会分配一个新数组。很明显,列表中有 256 个元素,无法放入大小为 0 的数组中,因此必须在方法内部分配一个新数组,对吗?
那么这个注释不正确吗?或者还有别的意思吗?