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

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

HashMap настроен так:

HashMap<Pair<Integer, Integer>, Object>

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

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

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

1 ответ

Решение

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

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

Другие вопросы по тегам