抛出异常的Arraylist addAll()方法

时间:2013-10-16 07:57:08

标签: java arrays list collections arraylist

为什么我在执行以下代码时遇到异常。

  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));

由于

2 个答案:

答案 0 :(得分:10)

第一个案例

List<String> list = Arrays.asList(array1);
list.addAll(Arrays.asList(array2));

由于第一种情况中的listUnmodifiable(就大小而言),因为它是asList方法返回的。

来自asList()

的文档
  

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

因此,当您直接引用它时,当您尝试修改它时,最终会使用exception

第二种情况

List<String> list = new ArrayList<String>(Arrays.as.asList(array1));

此处您不是直接引用list。您正在创建新的ArrayList并使用Arrays.as.asList(array1)返回的列表数据,该数据不是Unmodifiable(就大小而言)。

答案 1 :(得分:1)

Arrays.asList()

这总是返回一个不可修改的列表。