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

时间:2015-03-12 22:07:26

标签: 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中删除元素时,会发生这种情况。但是,正如你所看到的,我并没有删除任何东西。

是什么给出了?

2 个答案:

答案 0 :(得分:3)

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

因此,您正在修改instances while(并发)迭代其条目。

答案 1 :(得分:1)

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

添加到地图也是一种修改。