LinkedList迭代器删除[重复]

2023-11-26

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

它出什么问题了?根本无法理解为什么会出现错误,我确信我在数组列表或数组上使用了相同的代码并且它已经工作了。


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

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

或者您只是希望删除中的所有元素Collection,你可以使用:

flights.clear();

See: 迭代 Collection 时删除元素的高效等效方法

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LinkedList迭代器删除[重复] 的相关文章

随机推荐