当前位置: 首页 > 知识库问答 >
问题:

无法对ArrayList执行操作[duplicate]

司空锋
2023-03-14

我的意图是对ArrayList进行简单的克隆,但在此之前,我在修改列表时遇到了一个问题。在列表中添加另一个元素

UnsupportedOrderException

为什么?

class Mine implements Cloneable {
    public List<Integer> list;
    Mine(List<Integer> mylist) {
        this.list = mylist;
    }
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

class Demo {
    public static void main(String[] args) throws CloneNotSupportedException {
        List<Integer> klist= Arrays.asList(10,20,30,40,50);
        Mine m1=new Mine(klist);
        m1.list.add(11); // <- why i am unable to add to the list
        Mine m2= (Mine) m1.clone();
    }
}

共有3个答案

甘学潞
2023-03-14

除了@danfirst的答案(现在还有@JonSkeet),您还可以创建自己的asList()方法来返回可变的List

static public List<T> asMutableList(T ... elts) {
    List<T> lst = new ArrayList<>(elts.length);
    for (T el : elts) {
        lst.add(el);
    }
    return lst;
}

虞华彩
2023-03-14

数组.asList() 返回一个列表

数组在Java中具有固定大小,因此Arrays.asList返回的列表也必须具有固定大小-您不能添加到其中,也不能从中删除。

您可以创建一个新的ArrayList

List<Integer> list = new ArrayList<>(Arrays.asList(...));

尽管< code>ArrayList仍然由一个数组支持,但它会在必要的地方创建一个新数组。数组是实现细节,而不是< code>Arrays.asList返回的现有数组的“视图”。

糜帅
2023-03-14

您无法更改Arrays返回的List(使用 or 或类似方法)的元素数。asList (但它允许使用.set()更改元素)。

在Arrays.asList的文档中:

返回的列表实现可选的 Collection 方法,但那些会更改返回列表大小的方法除外。这些方法使列表保持不变,并引发“不支持的操作异常”。

相反,您可以创建一个具有相同元素的ArrayList

List<Integer> klist= new ArrayList<>(Arrays.asList(10,20,30,40,50));
 类似资料:
  • 无法在下面的链接中执行右键单击操作。我们尝试了几乎所有的案例来实现自动化。https://the-internet.herokuapp.com/context_menu 我使用的是Selenium 3.3和geckodrivers的最新版本。 动作动作=新动作(驱动);行为moveToElement(元素)。点击();行为上下文单击(元素)。build()。执行();行为发送键(键。箭头向下)。发

  • 我得到了"org.springframework.dao.数据完整性违反异常:无法执行语句;SQL[n/a];约束[null];嵌套异常是org.hibernate.exception.约束违反异常:无法执行语句"异常,同时将对象保存到存储库。 要求:计划将只有一个Cpricing对象,因此我添加了@OneToOne映射。下面是预期的表结构。 我在实体类中有以下代码更改: 当试图保存包含CPric

  • 我有一个猫鼬模式 我最初设置了名称和电话字段的集合。我需要将集合更新为消息数组中的新消息和新地址到地址对象中。该函数还必须处理任何单个操作,即在某些情况下我只更新到消息数组或更新到名称和地址。所以我如何在单个函数中执行所有操作。

  • 我试图在元素上执行拖放操作,但它没有发生。 这是我正在处理的页面的片段。在这里,我试图将磁贴“时间”拖动并放置在磁贴“批准”的位置。截图 这是我正在使用的代码。 代码 超文本标记语言 源元素 目标元素 如果你需要更多细节,请告诉我。

  • 我做了一个简单的科学测验java应用程序,有4个框架:登录、菜单、测试和结果。 前三个帧工作正常,但当我单击显示结果时,它显示错误。这是我在Test JFrame中的代码。如果您愿意,我也可以发送其他帧的编码 这是我的错误 测试JFrame编码