我需要从列表中递归删除元素,但即使将迭代器应用于主题的副本,我也会遇到并发修改错误。
List<Referee> referees=videogame.getGamers();
Iterator<Referee> iter= referees.iterator();
while(iter.hasNext()){
Referee ref= iter.next();
if(ref.getTheGameIsOver())
videogame.removeReferee(ref);
}
答案 0 :(得分:2)
当Iterator
迭代它时,您正在修改基础集合。这就是造成ConcurrentModificationException
。
而是在Iterator
本身上调用remove()
。它会导致此异常,从而删除最近迭代的项目。取代
videogame.removeReferee(ref);
与
iter.remove();
答案 1 :(得分:1)
使用它的正确方法如下所示,因为迭代器对象在列表导航时知道它在列表中的位置。
List<Referee> referees=videogame.getGamers();
Iterator<Referee> iter= referees.iterator();
while(iter.hasNext()){
Referee ref= iter.next();
if(ref.getTheGameIsOver())
iter.remove()
}
请参阅http://durgaprasadtechie.blogspot.com/2011/07/concurrentmodificationexception-fail.html