为什么我在执行以下代码时遇到异常。
String[] array1 = {"A","B","C","D","E"};
String[] array2 = {"F","G","H","I"};
List<String> list = Arrays.asList(array1);
list.addAll(Arrays.asList(array2)); //here getting exception
异常
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(Unknown Source)
at java.util.AbstractList.add(Unknown Source)
at java.util.AbstractCollection.addAll(Unknown Source)
at Sample6.main(Sample6.java:19)
但是这段代码运作良好。
List<String> list = new ArrayList<String>(Arrays.as.asList(array1));
list.addAll(Arrays.asList(array2));
由于
答案 0 :(得分:10)
第一个案例
List<String> list = Arrays.asList(array1);
list.addAll(Arrays.asList(array2));
由于第一种情况中的list
为Unmodifiable
(就大小而言),因为它是asList
方法返回的。
来自asList()
的文档返回由指定数组支持的固定大小的列表。
因此,当您直接引用它时,当您尝试修改它时,最终会使用exception
。
第二种情况
List<String> list = new ArrayList<String>(Arrays.as.asList(array1));
此处您不是直接引用list
。您正在创建新的ArrayList
并使用Arrays.as.asList(array1)
返回的列表数据,该数据不是Unmodifiable
(就大小而言)。
答案 1 :(得分:1)
Arrays.asList()
这总是返回一个不可修改的列表。