我试过下面的代码, 它仅适用于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);
}
}
}
答案 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。