在 Java 中将列表转换为数组

2022-08-31 04:08:54

如何在 Java 中将 a 转换为 a?ListArray

检查以下代码:

ArrayList<Tienda> tiendas;
List<Tienda> tiendasList; 
tiendas = new ArrayList<Tienda>();

Resources res = this.getBaseContext().getResources();
XMLParser saxparser =  new XMLParser(marca,res);

tiendasList = saxparser.parse(marca,res);
tiendas = tiendasList.toArray();

this.adaptador = new adaptadorMarca(this, R.layout.filamarca, tiendas);
setListAdapter(this.adaptador);  

我需要用 的值填充数组。tiendastiendasList


答案 1

也:

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的后期更新,这个调用是内延的,使得空数组版本的性能与预先调整大小的版本相同,有时甚至更好。此外,传递预先调整大小的数组对于并发或同步集合也是危险的,因为如果集合在操作期间并发收缩,则大小toArray 调用之间可能会发生数据争用,这可能会导致数组末尾出现额外的 null。

这种检查允许遵循统一的风格:要么使用空数组(在现代Java中建议使用),要么使用预先调整大小的数组(在较旧的Java版本或非基于HotSpot的JVM中可能更快)。


答案 2

Java 8 中的替代方案:

String[] strings = list.stream().toArray(String[]::new);

从 Java 11 开始:

String[] strings = list.toArray(String[]::new);