为什么在没有删除任何内容时我得到 java.util.ConcurrentModificationException?

Why am I getting a java.util.ConcurrentModificationException when nothing is being removed?

当我 运行 以下代码时,我得到 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 中删除元素时会发生这种情况。但是,如您所见,我没有删除任何内容。

什么给了?

顾名思义,当以任何方式修改源集合时都会抛出此异常。

加图也是修改

iteratorinstances 支持,循环修改 instances(通过调用 instances.put)。

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