这个问题在这里已经有了答案:Converting 'ArrayList
如何在 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
。
任何一个:
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 调用之间可能存在数据竞争,这可能会导致额外的如果集合在操作期间同时收缩,则数组末尾的空值。此检查允许遵循统一的样式:使用空数组(在现代 Java 中推荐)或使用预先确定大小的数组(可能在较旧的 Java 版本或非 HotSpot 中更快基于 JVM)。
Java 8 中的替代方案:
String[] strings = list.stream().toArray(String[]::new);
从 Java 11 开始:
String[] strings = list.toArray(String[]::new);
我认为这是最简单的方法:
Foo[] array = list.toArray(new Foo[0]);
If the list fits in the specified array, it is returned therein. Otherwise, a new array is allocated with the runtime type of the specified array and the size of this list.
If the list fits in the specified array
。确保列表不适合传递的数组 new Foo[0]
(除非列表本身为空),并且将创建一个新数组来保存列表项。您只是传递数组的类型(而对象本身是无用的)。
在没有 Java 8 的情况下,我想到的最好的事情是:
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;
}
如果有人有更好的方法,请分享:)
我遇到了解决它的代码片段。
//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]);
转换工作如下:
它创建一个新的 Long 数组,其大小与原始列表相同 它使用新创建的数组将原始 ArrayList 转换为一个数组 它将该数组转换为一个 Long 数组 (Long[]),我将其命名为“array”
(Long[])
强制转换或 toArray
的 new Long[list.size()]
参数,但不能同时使用!
这是作品。有点儿。
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]);
}
对于 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
您可以按如下方式使用 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);
}
这(Ondrej 的回答):
Foo[] array = list.toArray(new Foo[0]);
是我看到的最常见的成语。那些建议您使用实际列表大小而不是“0”的人误解了这里发生的事情。 toArray 调用不关心给定数组的大小或内容——它只需要它的类型。如果它采用实际类型会更好,在这种情况下“Foo.class”会更清晰。是的,这个习惯用法会生成一个虚拟对象,但包含列表大小只是意味着您生成了一个更大的虚拟对象。同样,该对象不以任何方式使用;它只是需要的类型。
new Foo[0]
,则数组 new Foo[0]
将被忽略并创建一个适当大小的新数组。如果您使用 new Foo[list.size()]
,则数组 new Foo[list.size()]
将被填充,并且不会创建其他数组。
尝试这个:
List list = new ArrayList();
list.add("Apple");
list.add("Banana");
Object[] ol = list.toArray();
不定期副业成功案例分享
list.toArray(new Foo[0])
,因为这清楚地表明参数仅用于类型信息,大小无关紧要。new Foo[0]
,那么您正在创建一个额外的无用数组。检查源代码以进行验证。Foo[] array = list.toArray();
超出了我的范围。list.toArray()
返回Object[]
而不是Foo[]
。Collection
的.toArray()
早在 Java 1.0 或 1.1 中就被定义为返回Object[]
,现在更改它为时已晚。 Kinda 让我希望 Java 使用不同的泛型集合,例如 .NET,以避免这种疯狂。