Я работал над анализом отказоустойчивых итераторов с помощью Maps и проверял, будет ли операция обновляться на клоне или на фактической карте
private static void failSafeIterator() {
ConcurrentHashMap<String, String> map=new ConcurrentHashMap<>();
map.put("a", "one");
map.put("b", "two");
Iterator<String> keyIterator=map.keySet().iterator();
while(keyIterator.hasNext()){
String key=keyIterator.next();
System.out.println(key+":"+map.get(key));
map.put("c", "three");
map.put("q", "four");
map.put("W", "five");
}
System.out.println(map.get("q"));
}
Согласно приведенному фрагменту кода,
добавление c, q и w должно было произойти на клоне, а не на фактической коллекции
Но я вижу, что обновление происходит в коллекции.
Вывод также немного сбивает с толку, поскольку не все пары ключ-значение печатаются, даже если ключ присутствует на карте.
Вывод:
a:one
b:two
c:three
W:five
four