java - Java中的并发修改异常

标签 java list arraylist concurrentmodification listiterator

<分区>

我在执行这段代码时遇到了 ConcurrentModificationException。我无法弄清楚为什么会这样?

private void verifyBookingIfAvailable(ArrayList<Integer> list, int id) {

        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()) {
                int value = iterator.next();
                if (value == id) {
                    int index = list.indexOf(id);

                    if (index != -1) {
                        list.remove(index);
                    }
                }
        }
    }

提前致谢。

最佳答案

您正在使用 list 引用本身删除列表中的元素,这可能会抛出 ConcurrentModificationException。请注意,这有时可能会起作用,但并非总是如此,并且不能保证完美地起作用。

此外,即使您使用Iterator 来迭代您的列表,您仍然不应该使用list.remove,您应该只使用iterator.remove( ) 删除元素,否则无论您使用迭代器还是增强的 for 循环,都不会产生任何影响。

因此,使用iterator.remove() 来删除元素。

if (index != -1) {
    iterator.remove(value);
}

查看这篇文章:- java-efficient-equivalent-to-removing-while-iterating-a-collection以获得更详细的解释。

关于java - Java中的并发修改异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13307471/

相关文章:

java.lang.UnsatisfiedLinkError : Native method not found: 错误

Java Map反模式?

java - 设置 ArrayList<ArrayList<String>> 的大小/维度

Java - 将 if() 语句中的新对象添加到 if(){} 外部声明的列表中

java - 删除数组中的零的输出未按预期输出?

java - Jetty 9.0.6 - java.net.ConnectException : Connection refused: connect

java - 如何在删除 Firebase 中的行后刷新 Recyclerview 适配器中的数据

python - 在嵌套字典的每个键中添加相反数量的值

c# - 我如何定义一个检查整数列表

java - 如何将具有多个参数的对象的单个参数添加到该对象的数组列表中的字符串中?