5-如何在Java中将列表转换为数组?|Java Debug 笔记

344 阅读1分钟

本文正在参加「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