可能重复:
How to convert an ArrayList containing Integers to primitive int array?
我尝试了下面的代码,但它不起作用。我是否必须将ArrayList
循环复制到数组中?
int[]intArray = (int[]) integerArrayList.toArray();
答案 0 :(得分:23)
如果您想要 primitive 类型数组,可以使用Apache Commons
ArrayUtils#toPrimitive
方法从包装器数组中获取原始数组: -
public static int[] toPrimitive(Integer[] array)
您可以像这样使用它: -
int[] arr = ArrayUtils.toPrimitive((Integer[])integerArrayList.toArray());
或者,您可以使用 1-arg 版本的 toArray 方法,该方法采用数组并仅返回该类型的数组。这样,您就不必进行类型转换。
List<Integer> myList = new ArrayList<Integer>();
Integer[] wrapperArr = myList.toArray(new Integer[myList.size()]);
// If you want a `primitive` type array
int[] arr = ArrayUtils.toPrimitive(wrapperArr);
但是,如果您使用wrapper type
数组(这当然不会给您带来麻烦),那么您不需要来做到这一点步骤
此外,您还可以创建原语数组,而无需创建该中间 Wrapper类型数组。为此,你必须通过loop
来写它: -
int[] arr = new int[myList.size()];
for(int i = 0; i < myList.size(); i++) {
if (myList.get(i) != null) {
arr[i] = myList.get(i);
}
}
答案 1 :(得分:7)
你需要迭代并复制它。
int[] intArray = new int[integerArrayList.size()];
for (int i = 0; i < intArray.length; i++) {
intArray[i] = integerArrayList.get(i);
}
答案 2 :(得分:2)
你应该使用arraylist的toArray(T[] arr)
方法而不是没有args的arrayList的toArray()
。
请参考该方法签名here。
如下所示:
ArrayList<Integer> al = new ArrayList<>();
al.add(2);
al.add(3);
Integer[] arr = al.toArray(new Integer[al.size()]);
System.out.println(arr.length);//returns 2
答案 3 :(得分:2)
您不需要循环,也不需要对int
进行类型转换。只需将int
的声明更改为Integer
即可。如果需要,其他代码将使用自动取消装箱到int
元素。
// List adapter for primitive int array public static List<Integer> asList(final int[] a) { return new AbstractList<Integer>() { public Integer get(int i) { return a[i]; } // Throws NullPointerException if val == null public Integer set(int i, Integer val) { Integer oldVal = a[i]; a[i] = val; return oldVal; } public int size() { return a.length; } };
}