首页 >Java >java教程 >在迭代期间从 ArrayList 中删除元素时如何避免 ConcurrentModificationException?

在迭代期间从 ArrayList 中删除元素时如何避免 ConcurrentModificationException?

Barbara Streisand
Barbara Streisand原创
2024-10-28 03:18:301020浏览

How to Avoid ConcurrentModificationException When Removing Elements from an ArrayList During Iteration?

迭代时修改 ArrayList 时如何处理 ConcurrentModificationException

迭代 ArrayList 时,尝试在迭代期间删除元素可能会导致 java.util.ConcurrentModificationException 。发生这种情况是由于 ArrayList 的快速失败机制,该机制会在迭代期间检测列表结构的任何更改,并引发异常以防止出现意外结果。

要解决此问题,有两种主要方法可供考虑:

选项 1:创建要删除的值列表

此方法涉及识别循环中要删除的元素并将它们添加到单独的列表中。迭代完成后,使用removeAll()方法从原始列表中删除所有元素。

<code class="java">ArrayList<A> valuesToRemove = new ArrayList<>();

for (A a : abc) {
    if (a.shouldBeRemoved()) {
        valuesToRemove.add(a);
    }
}

abc.removeAll(valuesToRemove);</code>

选项2:使用迭代器Remove

或者,您可以使用迭代器自己的删除()方法。但是,请注意,这种方法需要使用传统的 for 循环,而不是增强的 for 循环。

<code class="java">for (Iterator<A> iterator = abc.iterator(); iterator.hasNext();) {
    A a = iterator.next();
    if (a.shouldBeRemoved()) {
        iterator.remove();
    }
}</code>

通过实现其中一种方法,您可以避免 ConcurrentModificationException,同时在迭代期间有效修改 ArrayList。

以上是在迭代期间从 ArrayList 中删除元素时如何避免 ConcurrentModificationException?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn