Java中的并发修改异常

mun*_*ikh 3 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);
                    }
                }
        }
    }
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Roh*_*ain 11

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

此外,即使您使用Iterator迭代列表,您仍然不应该使用list.remove,您应该只使用iterator.remove()删除元素,否则它将没有任何区别,无论您使用迭代器还是增强的for循环.

所以,iterator.remove()用来删除元素.

if (index != -1) {
    iterator.remove(value);
}
Run Code Online (Sandbox Code Playgroud)

请参阅此文章: - java-efficient-equivalent-to-removal-while-iterating-a-collection以获取更详细的说明.