数组转换列出错误

时间:2017-07-04 12:14:53

标签: java eclipse

有人可以向我解释下一行代码中会发生什么以及它为什么会起作用?

Integer[] myray = {1,2,3,4,5};
List<Integer> l = new ArrayList<Integer>(Arrays.asList(myray));
l.add(6);
System.out.println(l);

上面的代码运行正常。它将数组转换为列表,然后添加另一个元素。 但以下代码不起作用

Integer[] myray = {1,2,3,4,5};
List<Integer> l = (Arrays.asList(myray));
l.add(6);
System.out.println(l);

上面的代码给出了以下错误: 线程“main”中的异常java.lang.UnsupportedOperationException 有人可以告诉我两次转换之间的区别以及为什么只有第一次转换? 提前致谢

2 个答案:

答案 0 :(得分:4)

Arrays.asList(myray)返回由数组支持的固定大小的List实现(java.util.Arrays.ArrayList),因此您无法向其添加元素(或从中删除元素)。< / p>

当您创建新的java.util.ArrayList并向其构造函数传递来自List的固定大小的Arrays.asList时(正如您在第一个代码段中所做的那样),您将获得正常java.util.ArrayList 1}}你可以添加元素。

答案 1 :(得分:1)

因为来自asList类的Arrays方法会返回一个不可变列表,您无法修改该列表。它只是可读的。

这是同一个

docs
  

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

在第一种情况下,您没有直接使用它并且围绕它创建新列表。

new ArrayList<Integer>(Arrays.asList(myray));

当你在内部执行此操作时,元素只会获得复制,并且您将获得ArrayList的常规实例。