LinkedList iterator remove [duplicate]

拟墨画扇 提交于 2019-12-01 17:21:13

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!