问题
Possible Duplicate:
Efficient equivalent for removing elements while iterating the Collection
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)
Whats wrong with it? cant at all understand why the error is given, I am sure i have used the same code on arraylists or arrays and it has worked.
回答1:
You cannot remove an item from the collection directly while iterating through the elements as this will cause a ConcurrentModificationException. Iterator.remove() is the accepted safe way to modify a collection during iteration. To avoid seeing an IllegalStateException, make sure to call Iterator.next():
while (itr.hasNext()) {
itr.next();
itr.remove();
}
or as you simply wish to remove all elements in the Collection, you could use:
flights.clear();
See: Efficient equivalent for removing elements while iterating the Collection
来源:https://stackoverflow.com/questions/13344447/linkedlist-iterator-remove