您好我有以下代码结构
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(类变量)。请帮忙。
答案 0 :(得分:0)
使用此代码:
Set<String> st = mapA.keyset();
someset = mapA.keyset();
someset
和st
都指向同一套。因此,您实际上已从第一个方法中的for-each
循环中重复使用该集合。
答案 1 :(得分:0)
除非你需要将某些内容传递给s的someotherclassfunction(),否则你不需要外部for循环。 所以改变下面的内容;
for (String s: st) { //this is where now the exception occurs
someotherclassfunction();
}
到
someotherclassfunction();
应该摆脱ConcurrentModificationException。