15

可能重复:
如何将包含整数的 ArrayList 转换为原始 int 数组?

我尝试了下面的代码,但它不起作用。我是否必须将循环复制ArrayList到数组中?

int[]intArray = (int[]) integerArrayList.toArray();
4

4 回答 4

26

如果你想要原始类型数组,你可以使用方法从包装数组中获取原始数组:-Apache Commons ArrayUtils#toPrimitive

public static int[] toPrimitive(Integer[] array)

你可以像这样使用它: -

int[] arr = ArrayUtils.toPrimitive((Integer[])integerArrayList.toArray());

或者,您可以使用toArray方法的1-arg版本,它接受一个数组并仅返回该类型的数组。这样,您就不必进行类型转换

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);
    }
}
于 2012-10-27T09:45:26.003 回答
9

您需要遍历并复制它。

int[] intArray = new int[integerArrayList.size()];
for (int i = 0; i < intArray.length; i++) {
    intArray[i] = integerArrayList.get(i);
}
于 2012-10-27T09:45:37.300 回答
2

您不需要循环,也不需要类型转换为int. 只需更改 to 的声明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; }
    };

}

于 2012-10-27T10:02:01.310 回答
1

你应该使用arraylist的方法而不是没有argstoArray(T[] arr)的arrayList 。在此处toArray()参考该方法签名。

如下所示:

   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
于 2012-10-27T09:47:18.500 回答