【问题标题】:Array Conversion To List Error [duplicate]数组转换为列表错误[重复]
【发布时间】:2017-07-04 12:14:52
【问题描述】:

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

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

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

【问题讨论】:

  • @OHGODSPIDERS 巧合的高度?副本的回答者也回答了这个问题。

标签: java eclipse


【解决方案1】:

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

当你创建一个新的java.util.ArrayList 并将你从Arrays.asList 得到的固定大小的List 传递给它的构造函数时(就像你在第一个sn-p 中所做的那样),你会得到一个普通的java.util.ArrayList可以添加元素。

【讨论】:

    【解决方案2】:

    因为来自Arrays 类的asList 方法为您提供了一个无法修改的不可变列表。它只是可读的。

    这里是docs 相同的

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

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

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

    当你在内部这样做时,元素只会被复制,你会得到一个 ArrayList 的常规实例。

    【讨论】:

    • Arrays.asList 不是不可变的,它只是固定长度(您可以替换现有位置的值!)。
    猜你喜欢
    • 1970-01-01
    • 2019-01-21
    • 2014-07-14
    • 2012-04-01
    • 2022-07-07
    • 2018-11-30
    • 2017-12-01
    • 2016-03-25
    • 1970-01-01
    相关资源
    最近更新 更多