java - 设置迭代器的并发修改异常

标签 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 集,而是在修改 someset (类变量)。请帮忙。

最佳答案

使用此代码:

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

somesetst 都指向同一个集合。因此,您实际上是从第一个方法的 for-each 循环中迭代的集合中删除。

关于java - 设置迭代器的并发修改异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23130930/

相关文章:

php - Facebook PHP SDK 3.0 - OAuthException : An active access token must be used to query information about the current user

java - 需要一个 Java 映射/表,其中包含一个值的多个键。值(value)通常会改变

java - 如何实现始终返回非空值的排序多值树映射

java - 如何在docker内部获取kafka的解析网络?

c++ - 将数据流式传输到 C++ 异常类中是否存在任何危险?

java - 如何从 Mosquitto 清除所有保留的 mqtt 消息?

c# - 执行 MySQL 查询时出错

java - 如何更改对象在集合中重复的含义?

java - 正则表达式来匹配此模式

java - 使用 LibGDX 创建角色选择屏幕