Почему этот метод не вызывает одновременную модификацию? если если (next.equals («3») это не так. Однако я изменить его на равных («1») это делает. Что здесь происходит?почему итератор не выбрасывает исключение одновременной модификации?
private void checkConcurrentModification(){
Map<String, Integer> map = new HashMap<>();
map.put("1", 1);
map.put("2", 2);
map.put("3", 3);
Iterator<Entry<String, Integer>> iterator = map.entrySet().iterator();
while(iterator.hasNext()){
String next = iterator.next().getKey();
map.put(next, 1);
if(next.equals("3")){ //does not throw exception
//if(next.equals("1")){ //throws exception
map.put("4", 4);
}
}
for(Entry<String, Integer> entry : map.entrySet()){
System.out.println("entry key and value" +entry.getKey() + " : " +entry.getValue());
}
}
prints:
entry key and value1 : 1
entry key and value2 : 1
entry key and value3 : 1
entry key and value4 : 4
Я получаю 'ConcurrentModificationException' для примера, как написано (с' 3'). – RealSkeptic
nope. вызывающий из основной. – Bharath