Добавление элементов в HashMap во время цикла с помощью Iterator

У меня есть программа, которая перебирает HashMap с помощью Iterator, и внутри цикла я добавляю к HashMap, что вызывает исключение ConcurrentModificationException. Я видел, что в ListIterator есть функция add(), которая обрабатывает это, а в Iterator — нет.

HashMap настроен следующим образом:

HashMap<Pair<Integer, Integer>, Object>

И итератор такой -

Iterator<Entry<Pair<Integer, Integer>, Object>> iter;

Объект (имя изменено) является классом моей программы. Кто-нибудь знает, как я могу добавить итератор во время цикла или любые другие варианты?


person Corey    schedule 01.03.2015    source источник
comment
Почему бы вам не добавить объекты в список и не добавить их на карту после завершения итерации?   -  person Marko Živanović    schedule 01.03.2015


Ответы (1)


Вместо этого прокрутите копию карты и добавьте ее к исходной карте. Набор записей карты представляет собой представление пар ключ-значение карты и не поддерживает добавление, хотя вы можете удалять элементы.

В качестве альтернативы вы можете добавлять элементы на новую карту во время итерации, а затем использовать putAll() после этого... если подумать, это, вероятно, более эффективно.

person RudolphEst    schedule 01.03.2015