在ArrayList中添加/删除方法与set方法

Hir*_*lia 4 java arraylist

在使用带有ArrayList的foreach时,我知道使用add/remove方法将无法工作,因为它会抛出并发修改异常,但为什么我能够在同一个foreach循环中使用set方法更改值?

以下是示例代码:

    for (Integer integer : arr) {
        if (integer==2) {
            arr.set(1, 6);
        }
        System.out.println(integer);
    }
    System.out.println(arr);
Run Code Online (Sandbox Code Playgroud)

如果我们将更改arr.add()然后它会抛出一个错误,但是设置它运行正常,这是什么原因?

shm*_*sel 7

根据文档,如果在创建迭代器后对列表进行结构修改,则抛出CME .由于set()只替换现有元素,因此不会发生结构修改,也不会抛出异常.

  • 结构修改是添加或删除一个或多个元素或显式调整后备数组大小的任何操作; 仅设置元素的值不是结构修改.〜完全同意并理解.问题是我需要更详细地阅读文档,而不仅仅是阅读哪种方法可以起作用.谢谢. (2认同)