本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>
问题:
如何在Java中将列表转换为数组?
检查以下代码:
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);
我需要将tiendasList的值填充到tiendas数组中。
热门答案:
答案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 inspection:
有两种样式可以将集合转换为数组:使用预先调整大小的数组(如c.toArray(new String[c.size()])
或使用空数组(如c.toArray(new String[0])。
在较旧的Java版本中,建议使用预大小的数组,因为创建适当大小的数组所需的反射调用非常慢。
然而,由于openjdk6的最新更新,这个调用是内部化的,使得空数组版本的性能与以前的版本相同,
有时甚至更好。另外,传递预大小的数组对于并发或同步的集合来说是危险的,因为大小和toArray
调用之间可能存在数据争用,如果在操作过程中同时收缩了集合,则可能会导致数组末尾出现额外
的空值。
这种检查允许遵循统一的风格:要么使用空数组(在现代Java中建议这样做),要么使用预先
调整大小的数组(在较旧的Java版本或非基于热点的jvm中可能更快)。
文章翻译自Stack Overflow