当没有任何内容被删除时,为什么我会得到java.util.ConcurrentModificationException?
运行以下代码时,我得到一个java.util.ConcurrentModificationException:当没有任何内容被删除时,为什么我会得到java.util.ConcurrentModificationException?,java,iterator,hashmap,Java,Iterator,Hashmap,运行以下代码时,我得到一个java.util.ConcurrentModificationException: public HashMap<String, String> instanceByPort() { HashMap<String, String> instances = new HashMap<String,String>(); SimpleSNMPClient client = new SimpleSNMPClient("udp
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;
}
public HashMap instanceByPort(){
HashMap实例=新建HashMap();
SimpleSNMPClient客户端=新的SimpleSNMPClient(“udp:“+hostname+”/161”,communityString);
试一试{
instances=client.gettableasstringslippednoid(新的OID(“1.3.6.1.2.1.31.1.1”);
迭代器迭代器=instances.entrySet().Iterator();
while(iterator.hasNext()){
Map.Entry实例=iterator.next();
String key=instance.getKey();
字符串值=instance.getValue();
实例。put(值、键);
}
}捕获(例外e){
System.out.println(“instanceByPort失败。”+e);
}
返回实例;
}
一些搜索表明,当您在遍历HashMap时从HashMap中删除元素时,就会发生这种情况。但是,正如你所看到的,我没有移除任何东西
给出了什么?顾名思义,在以任何方式修改源集合时都会引发此异常
添加到映射也是一种修改。顾名思义,当以任何方式修改源集合时,都会引发此异常
添加到映射也是一种修改。
迭代器由实例
支持,循环修改实例
(通过调用实例.put
)
因此,您正在修改实例
,同时(并发)迭代其条目 迭代器
由实例
支持,循环修改实例
(通过调用实例.put
)
因此,您正在修改实例
,同时(并发)迭代其条目 您正在更改集合,instances.put(value,key)代码>,同时对其进行迭代。这看起来像是此异常的设置,不是吗?“当您从HashMap中删除元素时,稍微搜索一下就表明会发生这种情况”如果您查看HashMap
的文档,您会看到它的状态是:“该类的所有“集合视图方法”返回的迭代器“快速失败:如果在创建迭代器后的任何时候,以迭代器自己的remove方法以外的任何方式修改映射,迭代器将抛出ConcurrentModificationException。”您正在更改集合,instances.put(值,键)
,在对其进行迭代时。这看起来像是针对此异常的设置,不是吗?“在从HashMap中删除元素时,稍加搜索就会出现这种情况”如果查看HashMap
的文档,您会看到它的状态是:“该类的所有“集合视图方法”返回的迭代器”快速失败:如果在创建迭代器后的任何时间以任何方式(除迭代器自己的remove方法外)修改映射的结构,迭代器将抛出ConcurrentModificationException。“当然。这很尴尬。我想把其中一个散列复制到一个新的散列。当然。这很尴尬。我想把其中一个散列复制到一个新的散列。