Если вы посмотрите на класс HashMap, вы увидите поле с именем 'modCount'. Так карта узнает, когда она была изменена во время итерации. Любой метод, который увеличивает значение modCount при выполнении итерации, заставит его вызвать исключение ConcurrentModificationException.
Тем не менее, вы МОЖЕТЕ поместить значение в карту, если ключ уже существует, эффективно обновляя запись новым значением:
Map<String, Object> test = new HashMap<String, Object>();
test.put("test", 1);
for(String key : test.keySet())
{
test.put(key, 2); // this works!
}
System.out.println(test); // will print "test->2"
Когда вы спрашиваете, можете ли вы выполнить эти операции «безопасно», вам не нужно слишком беспокоиться, потому что HashMap разработан для того, чтобы вызвать это исключение ConcurrentModificationException, как только оно столкнется с такой проблемой. Эти операции потерпят неудачу быстро; они не оставят карту в плохом состоянии.