-2

我尝试了下面的代码,它仅适用于 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);
        }
    }
}
4

7 回答 7

4

阅读实际合同Arrays#asList()。它生成的List只是现有数组的包装器,不支持任何会调整数组大小的操作。

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

List<Integer> intList = new ArrayList<Integer>(Arrays.asList(nums));
intList.addAll(Arrays.asList(nm));
于 2013-08-30T07:41:15.270 回答
3

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

List<Integer> intList = new ArrayList<>(Arrays.asList(nums));
于 2013-08-30T07:41:07.707 回答
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 类型的实际对象。这使得差异。这实际上是导致此异常的原因

于 2013-08-30T08:02:12.920 回答
2

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

也许你的意图是

List<Integer> intList = new ArrayList<Integer>(Arrays.asList(nums));
于 2013-08-30T07:42:20.650 回答
2

List使用创建的 sArrays.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);
}
于 2013-08-30T07:44:49.010 回答
0

Arrays.asList返回底层数组的固定大小视图:

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

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

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

final List<Integer> list = new ArrayList<Integer>(Arrays.asList(myArray));
于 2013-08-30T07:44:34.893 回答
0

您从 Arrays.asList 获得的列表不是可变的。因此,您需要使用 new 运算符将其分配给 intList 。

于 2013-08-30T07:46:08.577 回答