如何在不使用itr.remove()的情况下避免hashmap中的并发修改异常

时间:2014-08-16 17:19:32

标签: java

用例是一个函数(genLitCodes),它将BuildParams作为参数说pparams。 pparams将多维数据哈希映射为点亮(对于点亮的代码)。 在genLitCodes中我需要迭代所以使用itr.remove()来避免并发修改异常。

但是当控制返回到调用功能并且点亮时再次使用时会出现问题。一旦控制从genLitCodes(..)返回,我看到0映射。 我的代码再次使用相同的灯光,现在无法使用。

任何建议都要避免concurrentmodificationException以及保留对lits的引用 将不胜感激

示例代码在

之下

public boolean func(HashMap> plits,....){

    HashMap<String, HashMap<String, String>> llits = plits;
    //some code

                Iterator literator = llits.entrySet().iterator();
                while (literator.hasNext()) {
                    Map.Entry pairs = (Map.Entry) literator.next();
                 //  some code
                }
                //some code
                ***literator.remove();///to avoid concurrent modification exception***
            //some code
}

2 个答案:

答案 0 :(得分:0)

我不完全理解你的问题。基于我的假设我已经说过,在genLitCodes方法中想要迭代代码意味着它只调用了itr.next()而不是itr.remove。删除通常用于从hashmap中删除条目。

答案 1 :(得分:0)

使用java.util.concurrent.ConcurrentHashMap