LinkedList迭代器删除

时间:2012-11-12 13:19:32

标签: java iterator linked-list

  

可能重复:
  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)

它有什么问题吗?不能理解为什么会给出错误,我确信我在arraylists或数组上使用了相同的代码并且它已经工作了。

1 个答案:

答案 0 :(得分:13)

在迭代元素时,您无法直接从集合中删除项目,因为这会导致ConcurrentModificationExceptionIterator.remove()是在迭代期间修改集合的可接受的安全方法。为避免看到IllegalStateException,请务必致电Iterator.next()

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

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

flights.clear();

请参阅:Efficient equivalent for removing elements while iterating the Collection