抛出异常的Arraylist addAll()方法

Pra*_*ran 0 java arrays collections list 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
Run Code Online (Sandbox Code Playgroud)

例外

 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)
Run Code Online (Sandbox Code Playgroud)

但是这段代码运作良好.

List<String> list = new ArrayList<String>(Arrays.as.asList(array1));        
list.addAll(Arrays.asList(array2));
Run Code Online (Sandbox Code Playgroud)

谢谢

Sur*_*tta 10

第一个案例

List<String> list = Arrays.asList(array1);
list.addAll(Arrays.asList(array2));
Run Code Online (Sandbox Code Playgroud)

因为list 在第一种情况下是Unmodifiable(在大小方面),因为它是通过asList方法返回的.

来自asList()的文档

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

因此,当您直接引用它时,最终会exception在您尝试修改它时结束.

第二种情况

List<String> list = new ArrayList<String>(Arrays.as.asList(array1));
Run Code Online (Sandbox Code Playgroud)

在这里,你不是指list直接.您正在创建一个新的ArrayList并使用返回的列表的数据Arrays.as.asList(array1),这不是Unmodifiable(就大小而言).