将列表转换为Java中的数组

如何在Java中将List转换为Array

检查下面的代码:

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

1173219 次浏览

要么:

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.to数组(新字符串[c.size()]))或 使用空数组(如c.to数组(新字符串[0]).

In 建议使用预先确定大小的数组的旧Java版本,因为 反射调用,这是创建适当大小的数组所必需的 相当慢。然而,由于OpenJDK 6的更新较晚,这个电话 被内置,使得空数组版本的性能 相同的,有时甚至更好,与预尺寸相比 版本。传递预大小的数组对于并发或 同步收集作为数据竞争是可能的 大小toArray调用可能导致额外的空值 在数组的末尾,如果集合被同时收缩 在操作过程中。

此检查允许遵循 统一样式:使用空数组(建议在 现代Java)或使用预先设置大小的数组(在 较旧的Java版本或非基于HotSpot的JVM)。

试试这个:

List list = new ArrayList();
list.add("Apple");
list.add("Banana");


Object[] ol = list.toArray();

我认为这是最简单的方法:

Foo[] array = list.toArray(new Foo[0]);

这(Ondrej的回答):

Foo[] array = list.toArray(new Foo[0]);

是我见过的最常见的成语。那些建议你使用实际列表大小而不是“0”的人误解了这里发生的事情。toArray调用并不关心给定数组的大小或内容——它只需要它的类型。如果它采用实际的Type会更好,在这种情况下“Foo.class”会更清晰。是的,这个成语生成一个虚拟对象,但包括列表大小只是意味着你生成一个更大的虚拟对象。同样,该对象没有以任何方式使用;它只是需要的类型。

Java8中的备选方案:

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

Java11:

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

对于ArrayList以下作品:

ArrayList<Foo> list = new ArrayList<Foo>();


//... add values


Foo[] resultArray = new Foo[list.size()];
resultArray = list.toArray(resultArray);

示例取自此页面:http://www.java-examples.com/copy-all-elements-java-arraylist-object-array-example

import java.util.ArrayList;


public class CopyElementsOfArrayListToArrayExample {


public static void main(String[] args) {
//create an ArrayList object
ArrayList arrayList = new ArrayList();


//Add elements to ArrayList
arrayList.add("1");
arrayList.add("2");
arrayList.add("3");
arrayList.add("4");
arrayList.add("5");


/*
To copy all elements of java ArrayList object into array use
Object[] toArray() method.
*/


Object[] objArray = arrayList.toArray();


//display contents of Object array
System.out.println("ArrayList elements are copied into an Array.
Now Array Contains..");
for(int index=0; index < objArray.length ; index++)
System.out.println(objArray[index]);
}
}


/*
Output would be
ArrayList elements are copied into an Array. Now Array Contains..
1
2
3
4
5

我遇到了这个解决它的代码片段。

//Creating a sample ArrayList
List<Long> list = new ArrayList<Long>();


//Adding some long type values
list.add(100l);
list.add(200l);
list.add(300l);


//Converting the ArrayList to a Long
Long[] array = (Long[]) list.toArray(new Long[list.size()]);


//Printing the results
System.out.println(array[0] + " " + array[1] + " " + array[2]);

转换工作如下:

  1. 它创建一个新的Long数组,其大小与原始列表相同
  2. 它使用新创建的数组将原始ArrayList转换为数组
  3. 它将该数组转换为Long数组(Long[]),我恰当地命名为'array'

您可以使用toArray()api如下,

ArrayList<String> stringList = new ArrayList<String>();
stringList.add("ListItem1");
stringList.add("ListItem2");
String[] stringArray = new String[stringList.size()];
stringArray = stringList.toArray(stringList);

数组中的值是,

for(String value : stringList)
{
System.out.println(value);
}

这是工作。有点。

public static Object[] toArray(List<?> a) {
Object[] arr = new Object[a.size()];
for (int i = 0; i < a.size(); i++)
arr[i] = a.get(i);
return arr;
}

其次是主要方法。

public static void main(String[] args) {
List<String> list = new ArrayList<String>() \{\{
add("hello");
add("world");
}};
Object[] arr = toArray(list);
System.out.println(arr[0]);
}

最好的事情我来没有Java8是:

public static <T> T[] toArray(List<T> list, Class<T> objectClass) {
if (list == null) {
return null;
}


T[] listAsArray = (T[]) Array.newInstance(objectClass, list.size());
list.toArray(listAsArray);
return listAsArray;
}

如果有人有更好的方法,请分享:)