Вы перезаписываете запись карты, поэтому итератор работает, несмотря на это, поскольку проверка iterator()
касается структурной модификации карты.
Добавьте новую запись, и она выдаст исключение myMap.put("4","4");
.
Обратите внимание, что на самом деле поведение, которое вы заметили, является деталью реализации, и что даже если он работает, вы не должны рассматривать его как допустимый код.
Чтобы соответствовать спецификации API карты, вам не нужно менять картус объектом, на который ссылаются, когда вы используете итератор.
Map.keySet()
действительно указывает:
Если карта изменяется во время выполнения итерации по набору (кроме как через собственную операцию удаления итератора), результаты итерации не определены