如何修复java.util.ConcurrentModificationException

时间:2013-10-29 14:13:06

标签: java for-loop hashmap

我的代码导致错误,我不知道如何修复它。我尝试过放入打印语句,但它甚至不会那么做。发生错误

这是确切的错误

java.util.ConcurrentModificationException
java.util.ConcurrentModificationException
        at java.util.HashMap$HashIterator.nextEntry(HashMap.java:894)
        at java.util.HashMap$KeyIterator.next(HashMap.java:928)
        at ca.on.oicr.pinery.lims.gsle.GsleClient.getOrders(GsleClient.java:720)

第720行是循环的第二个

2 个答案:

答案 0 :(得分:2)

如果要在迭代元素时添加或删除列表中的元素,则可以使用ListIterator。这假设您的orders是一个列表

所以,你的代码看起来像这样 -

ListIterator<Order> it = orders.listIterator();

while ( it.hasNext() ) {
      Order ord = it.next();

      if ( ) // some condition
        it.remove(); // This wil remove the element that we just got using the next() method
      if ( ) // some other condition
        it.add(new Order()); // THis inserts the element immediately before the next call to next()
}

答案 1 :(得分:1)

您正在尝试在迭代其内容时操纵sample的内容。要解决这类问题,请使用不可变集合,或假装它们。

你要做的是,在迭代samples的同时,用你想要的那个构建另一个集合,并修改另一个集合而不是你原来的集合。