【问题标题】:Java LinkedList safest way to delete while iteratingJava LinkedList 迭代时最安全的删除方式
【发布时间】:2015-04-18 21:34:23
【问题描述】:
我记得不久前(我认为这是一本 Java 书籍),在遍历集合时删除元素的最安全方法是使用 iterator.remove。
while(iterator.hasNext())
{
if(it.next().condition())
iterator.remove();
}
由于我找不到该参考并且需要相对快速的确认,一些java老手可以确认这一点吗?
【问题讨论】:
标签:
java
collections
iterator
【解决方案1】:
这是在迭代过程中唯一在结构上修改LinkedList 的合法方式。
在迭代期间从链表中删除元素的任何其他方式都会(如果您幸运)抛出ConcurrentModificationException。
来自the documentation:
此类的iterator 和listIterator 方法返回的迭代器是快速失败的:如果列表在创建迭代器后的任何时间进行结构修改,除了通过迭代器自己的remove 或@ 之外的任何方式987654327@ 方法,迭代器将抛出一个ConcurrentModificationException。