要么:
Foo[] array = list.toArray(new Foo[0]);
要么:
Foo[] array = new Foo[list.size()];
list.toArray(array); // fill the array
请注意,这仅适用于引用类型的数组。对于原始类型的数组,请使用传统方式:
List<Integer> list = ...;
int[] array = new int[list.size()];
for(int i = 0; i < list.size(); i++) array[i] = list.get(i);
更新:
建议使用现在list.toArray(new Foo[0])
;,不是list.toArray(new Foo[list.size()])
;。
通过JetBrains Intellij Idea
检查:
有两种样式可以将集合转换为数组:使用预大小数组(如c.toArray(new String [c.size()]
))或使用空数组(如c.toArray(new String [ 0]
)。
在较早的Java版本中,建议使用预先设置大小的数组,因为创建适当大小的数组所需的反射调用非常慢。但是,由于OpenJDK 6的更新较晚,因此此调用变得很有趣,与空大小版本相比,空数组版本的性能相同,有时甚至更好。同样,传递预大小的数组对于并发或同步集合也是危险的,因为在size和toArray 调用之间可能会发生数据争用 ,如果在操作过程中同时缩小了集合,则可能导致数组末尾出现额外的null。
此检查允许遵循统一的样式:使用空数组(在现代Java中建议使用)或使用预定大小的数组(在较早的Java版本或基于非HotSpot的JVM中可能更快)。