set迭代器的并发修改异常

时间:2014-04-17 10:39:54

标签: java exception collections concurrentmodification

您好我有以下代码结构

    Private Set<String> someset = null; //a class variable

    someclassfunction() {
       Set<String> st = mapA.keyset();
       someset = mapA.keyset();

       for (String s: st) { //this is where now the exception occurs
            someotherclassfunction();
       }
    }

    someotherclassfunction() {
       Iterator<String> it = someset.iterator();
       while (it.hasNext()) {
           String key = it.next();
           if (somecondition) {
               it.remove();
           //Earlier I did, someset.remove(key), this threw concurrent
           //modification exception at this point. So I found on stack 
           //overflow that we need to use iterator to remove
           }
       }
    }

但是现在每个循环的调用函数都会发生同样的异常。这是为什么?我没有修改st set,我正在修改someset(类变量)。请帮忙。

2 个答案:

答案 0 :(得分:0)

使用此代码:

Set<String> st = mapA.keyset();
someset = mapA.keyset();

somesetst都指向同一套。因此,您实际上已从第一个方法中的for-each循环中重复使用该集合。

答案 1 :(得分:0)

除非你需要将某些内容传递给s的someotherclassfunction(),否则你不需要外部for循环。 所以改变下面的内容;​​

for (String s: st) { //this is where now the exception occurs
      someotherclassfunction();
}

someotherclassfunction();

应该摆脱ConcurrentModificationException。