仅修改Hashmap的值时的并发修改异常

时间:2018-05-21 04:27:32

标签: java concurrentmodification

我有类似下面的代码,其中内部循环修改Hashmap,但仅以不添加或删除新密钥的方式,但仅更新值。这是否有资格作为Hashmap的修改,以便抛出并发修改异常?在我目前的测试中,我还没有发现任何例外情况。

for(String variable:variableMap.descendingKeySet()) {
        for (String innerVariable : variableMap.keySet()) {
            variableMap.put(innerVariable, variableMap.get(innerVariable).replace("$" + variable, variableMap.get(variable)));
        }
    }

1 个答案:

答案 0 :(得分:2)

请参阅Javadoc of HashMap

  

此类的所有“集合视图”返回的迭代器   方法“快速失败:如果地图结构修改   创建迭代器之后的时间,除了通过之外的任何方式   迭代器自己的remove方法,迭代器会抛出一个   ConcurrentModificationException

现在什么是“结构修改”?

  

结构修改是添加或删除一个或多个的任何操作   更多映射; 仅仅更改与键相关的值表示   实例已包含结构修改。

所以,不,如果您只修改密钥的值,则不会获得ConcurrentModificationException