2012-11-12 90 views
1

可能重复:
Efficient equivalent for removing elements while iterating the CollectionLinkedList的迭代器删除

private LinkedList flights; 

....

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) 

它有什么不对?完全不知道为什么给出错误,我确信我已经在arraylists或数组上使用了相同的代码,并且它已经工作了。

+4

为什么不要调用'flights.clear()'? – assylias

回答

10

在遍历元素时,无法直接从集合中删除项目,因为这会导致ConcurrentModificationExceptionIterator.remove()是在迭代期间修改集合的公认安全方法。为了避免看到一个IllegalStateException,请确保调用Iterator.next()

while (itr.hasNext()) { 
    itr.next(); 
    itr.remove(); 
} 

或者你只是想删除的Collection的所有元素,你可以使用:

flights.clear(); 

参见:Efficient equivalent for removing elements while iterating the Collection

+0

itr.remove()产生一个错误(顺便说一句,我需要使用interator单独删除它们)。 – user1817988

+0

什么是错误? – Reimeus

+0

异常线程 “main” java.lang.IllegalStateException \t在java.util.LinkedList中的$ ListItr.remove(来源不明) \t在section1.FlightQueue.clear(FlightQueue.java:44) \t在section1.FlightTest001。 main(FlightTest001.java:22) – user1817988