2012-11-12 134 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