java - 当没有删除任何内容时,为什么我会收到 java.util.ConcurrentModificationException?

标签 java iterator hashmap

当我运行以下代码时,我收到 java.util.ConcurrentModificationException:

public HashMap<String, String> instanceByPort() {
    HashMap<String, String> instances = new HashMap<String,String>();

    SimpleSNMPClient client = new SimpleSNMPClient("udp:" + hostname + "/161", communityString);
    try {
        instances = client.getTableAsStringsFlippedNoOID(new OID("1.3.6.1.2.1.31.1.1.1.1"));

        Iterator<Map.Entry<String, String>> iterator = instances.entrySet().iterator() ;
        while(iterator.hasNext()){
            Map.Entry<String, String> instance = iterator.next();
            String key = instance.getKey();
            String value = instance.getValue();
            instances.put(value, key);
        }
    } catch (Exception e) {
        System.out.println("instanceByPort failed. " + e);
    }
    return instances;
}

一些搜索表明,当您在迭代 HashMap 时从 HashMap 中删除元素时,就会发生这种情况。但是,如您所见,我不会删除任何内容。

什么给出了?

最佳答案

迭代器实例支持,并且循环修改实例(通过调用instances.put)。

因此,您在迭代其条目的同时(同时)修改实例

关于java - 当没有删除任何内容时,为什么我会收到 java.util.ConcurrentModificationException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29021167/

相关文章:

java - 如何在Android Studio中设置音频延迟?

java - 数字提升仅适用于算术运算符?

java - java中的Spark MLlib不起作用

python - 如何构建一个基本的迭代器?

c++ - 将迭代器传递给 lambda

java - 无法执行使用 Rhino JavaScript 编译器编译的 JavaScript 文件

C++ 在给定位置寻找一个 std::string::iterator

rust - rust : insert uint in hashmap reference

java - 将 HashMap 发送到其他 Activity 时如何修复 InvocableTargetException

java - 当桶中的条目对象从阈值减少后,JDK 8中的hashmap是否会再次调整自身大小?