运行以下代码时,我收到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中删除元素时,会发生这种情况。但是,正如你所看到的,我并没有删除任何东西。
是什么给出了?
答案 0 :(得分:3)
iterator
由instances
支持,循环修改instances
(通过调用instances.put
)。
因此,您正在修改instances
while(并发)迭代其条目。
答案 1 :(得分:1)
顾名思义,当以任何方式修改源集合时,抛出此异常。
添加到地图也是一种修改。