迭代 ArrayList 时,尝试在迭代期间删除元素可能会导致 java.util.ConcurrentModificationException 。发生这种情况是由于 ArrayList 的快速失败机制,该机制会在迭代期间检测列表结构的任何更改,并引发异常以防止出现意外结果。
要解决此问题,有两种主要方法可供考虑:
此方法涉及识别循环中要删除的元素并将它们添加到单独的列表中。迭代完成后,使用removeAll()方法从原始列表中删除所有元素。
<code class="java">ArrayList<A> valuesToRemove = new ArrayList<>(); for (A a : abc) { if (a.shouldBeRemoved()) { valuesToRemove.add(a); } } abc.removeAll(valuesToRemove);</code>
或者,您可以使用迭代器自己的删除()方法。但是,请注意,这种方法需要使用传统的 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中文网其他相关文章!