Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当没有任何内容被删除时,为什么我会得到java.util.ConcurrentModificationException?_Java_Iterator_Hashmap - Fatal编程技术网

当没有任何内容被删除时,为什么我会得到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

运行以下代码时,我得到一个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;
}
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。“当然。这很尴尬。我想把其中一个散列复制到一个新的散列。当然。这很尴尬。我想把其中一个散列复制到一个新的散列。