Исключение одновременной модификации, когда изменяются только значения Hashmap - PullRequest
0 голосов
/ 21 мая 2018

У меня есть код, подобный приведенному ниже, в котором внутренний цикл изменяет 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 голосов
/ 21 мая 2018

См. Javadoc HashMap:

Итераторы, возвращаемые всеми "методами представления коллекции" этого класса, fail-fast :если карта является структурно измененной в любое время после создания итератора, любым способом, кроме как через собственный метод remove итератора, итератор выдаст ConcurrentModificationException.

Теперь, что такое «структурно модифицированный»?

Структурная модификация - это любая операция, которая добавляет или удаляет одно или несколько отображений; Простое изменение значения, связанного с ключом , который уже содержится в экземпляре, является , а не структурной модификацией.

Итак, нет, вы не получитеConcurrentModificationException если вы изменяете только значение ключа.

...