LinkedList iterator remove

25,055

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

Share:
25,055
user1817988
Author by

user1817988

Updated on November 13, 2020

Comments

  • user1817988
    user1817988 over 3 years

    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.