如何将2个整数数组的内容放入1个单一的arraylist中?

时间:2013-08-30 07:38:07

标签: java arrays arraylist

我试过下面的代码, 它仅适用于1个数组,当我尝试添加另一个数组时,它会抛出运行时异常

 Exception in thread "main" java.lang.UnsupportedOperationException
   at java.util.AbstractList.add(Unknown Source)
   at java.util.AbstractList.add(Unknown Source)
    at general.ArrToArrList.main(ArrToArrList.java:32)

代码是

import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;

public class ArrToArrList {
    public static void main(String[] args) {
        Integer[] nums = new Integer[5];
        nums[0] = 2;
        nums[1] = 4;
        Integer[] nm = { 3, 5, 7 };
        List intList = (Arrays.asList(nums));
        List intList2 = (Arrays.asList(nm));
        intList.addAll(Arrays.asList(nm));
        for (Integer i : intList) {
            System.out.println(i);
        }
    }
}

7 个答案:

答案 0 :(得分:4)

阅读the actual contract for Arrays#asList()。它生成一个List,它只是现有数组的包装器,不支持任何调整数组大小的操作。

如果您想要组合数组,则需要创建一个可调整大小的新List对象。尝试

List<Integer> intList = new ArrayList<Integer>(Arrays.asList(nums));
intList.addAll(Arrays.asList(nm));

答案 1 :(得分:3)

Arrays.asList返回固定大小的List。即,不能添加或删除任何元素。将asList的结果换成新的ArrayList以允许添加元素

List<Integer> intList = new ArrayList<>(Arrays.asList(nums));

答案 2 :(得分:2)

Arrays.asList将数组包装为显示为List。数组无法增长或缩小,因此您无法在此列表中添加或删除元素。

也许你想要的是

List<Integer> intList = new ArrayList<Integer>(Arrays.asList(nums));

答案 3 :(得分:2)

使用List创建的

Arrays.asList具有固定大小,因此您无法将其他元素添加到列表中。您可以创建一个新的法线ArrayList并将所有元素添加到列表中,如下所示:

Integer[] nums = new Integer[5];
nums[0] = 2;
nums[1] = 4;
Integer[] nm = { 3, 5, 7 };
List intList = (Arrays.asList(nums));
List intList2 = (Arrays.asList(nm));
List mergeList = new ArrayList();
mergeList .addAll(Arrays.asList(nums));
mergeList .addAll(Arrays.asList(nm));
for (Integer i : mergeList) {
    System.out.println(i);
}

答案 4 :(得分:2)

如果您使用

List intList = (Arrays.asList(nums)); 

它给出了类型为java.util.Arrays $ ArrayList的实际对象,其实现为

public void add(int index, E element) {
    throw new UnsupportedOperationException();
}

但是如果你使用

List intList = new ArrayList<Integer>(Arrays.asList(nums); 

它将为您提供java.util.ArrayList类型的实际对象。这有所不同。这实际上是导致此异常的原因

答案 5 :(得分:0)

Arrays.asList返回基础数组的固定大小视图:

  

返回由指定数组支持的固定大小列表。 1

您不能在返回的List中添加比数组中更多的元素。

您需要将其复制到java.util.ArrayList(令人困惑的Arrays.asList返回java.util.Arrays.ArrayList,这不是同一件事。)

final List<Integer> list = new ArrayList<Integer>(Arrays.asList(myArray));

答案 6 :(得分:0)

从Arrays.asList获得的列表不可变。所以你需要使用new运算符将它分配给intList。