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(就大小而言).