迭代TreeSet时出现java.util.ConcurrentModificationException

时间:2012-03-24 18:26:24

标签: java multithreading collections iterator

  

可能重复:
  ConcurrentModificationException and a HashMap

我收到以下异常

Exception in thread "main" java.util.ConcurrentModificationException
at java.util.TreeMap$PrivateEntryIterator.nextEntry(Unknown Source)
at java.util.TreeMap$KeyIterator.next(Unknown Source)
at Types$AdjList.makeConnected(Types.java:281)
at Main.main(Main.java:56)
执行以下代码时

public void makeConnected() {
        TreeSet<Node> exploredNodes = new TreeSet<Node>();
        TreeSet<Node> unexploredNodes = new TreeSet<Node>();
for (Node n : unexploredNodes) {
        ...
        exploredNodes.add(n);
        unexploredNodes.remove(n);
        ...
}

我没有像在HashMap中那样使用迭代器,但需要使用可能会根据某些条件增长或减少的Set。 我会接受并指出所有答案。期待如何回答如何解决ConcurrentModificationException的这个问题 谢谢, 索姆纳特

1 个答案:

答案 0 :(得分:4)

for循环内部使用迭代器,而不是使用迭代器删除元素。因此,问题。使用iterator的remove方法如下:

for (Iterator iterator = exploredNodes.iterator(); iterator.hasNext();) {
     Node n = (Node) iterator.next();
     unexploredNodes.add(n);         
     iterator.remove();
}