Java LinkedList迭代器删除

Java LinkedList迭代器删除,java,iterator,linked-list,Java,Iterator,Linked List,可能重复: 怎么了?我完全无法理解给出错误的原因,我确信我在ArrayList或arrays上使用了相同的代码,并且它已经起作用了。在遍历元素时不能直接从集合中删除项,因为这将导致ConcurrentModificationExceptionIterator.remove()是在迭代过程中修改集合的公认安全方法。要避免看到非法状态异常,请确保调用迭代器.next(): 或者,如果您只想删除集合中的所有元素,您可以使用: flights.clear(); 请参阅:为什么不调用flights

可能重复:


怎么了?我完全无法理解给出错误的原因,我确信我在ArrayList或arrays上使用了相同的代码,并且它已经起作用了。

在遍历元素时不能直接从集合中删除项,因为这将导致
ConcurrentModificationException
Iterator.remove()
是在迭代过程中修改集合的公认安全方法。要避免看到
非法状态异常
,请确保调用
迭代器.next()

或者,如果您只想删除
集合中的所有元素,您可以使用:

flights.clear();

请参阅:

为什么不调用
flights.clear()
?itr.remove()生成错误(顺便说一句,我需要使用一个interator单独删除它们)。线程“main”中的异常java.lang.IllegalStateCeption位于java.util.LinkedList$ListItr.remove(未知源代码)位于section1.FlightQueue.clear(FlightQueue.java:44)位于section1.FlightTest001.main(FlightTest001.java:22)您需要调用
itr.next()
,请参阅更新。
itr.remove()
?ListIterator.remove()的运行时间是多少?它在O(1)中运行。[Javadoc]()中没有明确提到,但[source code]()建议这样做。滚动到第918行查看实现
public void clear(){

    ListIterator itr = flights.listIterator();

    while(itr.hasNext()){


        flights.remove(itr.next());

    }

}
Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.LinkedList$ListItr.checkForComodification(Unknown Source)
    at java.util.LinkedList$ListItr.next(Unknown Source)
    at section1.FlightQueue.clear(FlightQueue.java:44)
    at section1.FlightTest001.main(FlightTest001.java:22)
while (itr.hasNext()) {
   itr.next();
   itr.remove();
}
flights.clear();