为什么在没有删除任何内容时我得到 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 中删除元素时会发生这种情况。但是,如您所见,我没有删除任何内容。
什么给了?
顾名思义,当以任何方式修改源集合时都会抛出此异常。
加图也是修改
iterator
由 instances
支持,循环修改 instances
(通过调用 instances.put
)。
因此,您在修改 instances
的同时(同时)迭代其条目。
当我 运行 以下代码时,我得到 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 中删除元素时会发生这种情况。但是,如您所见,我没有删除任何内容。
什么给了?
顾名思义,当以任何方式修改源集合时都会抛出此异常。
加图也是修改
iterator
由 instances
支持,循环修改 instances
(通过调用 instances.put
)。
因此,您在修改 instances
的同时(同时)迭代其条目。