迭代 ArrayList 时,尝试在迭代期间删除元素可能会导致 java.util.ConcurrentModificationException 。发生这种情况是由于 ArrayList 的快速失败机制,该机制会在迭代期间检测列表结构的任何更改,并引发异常以防止出现意外结果。
要解决此问题,需要考虑两种主要方法:
此方法涉及识别循环中要删除的元素并将它们添加到单独的列表中。迭代完成后,使用removeAll()方法从原始列表中删除所有元素。
ArrayList valuesToRemove = new ArrayList();
for (A a : abc) {
if (a.shouldBeRemoved()) {
valuesToRemove.add(a);
}
}
abc.removeAll(valuesToRemove);
或者,您可以使用迭代器自己的remove() 方法。但请注意,这种方法需要使用传统的 for 循环,而不是增强的 for 循环。
for (Iterator iterator = abc.iterator(); iterator.hasNext();) {
A a = iterator.next();
if (a.shouldBeRemoved()) {
iterator.remove();
}
}
通过实现其中一种方法,您可以避免 ConcurrentModificationException,同时在迭代期间有效修改 ArrayList。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3