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();