He jugado con java.util.HashMap
para conocer el comportamiento de fail-fast
.comportamiento fallido de java HashMap
HashMap map = new HashMap();
map.put("jon", 10);
map.put("sean", 11);
map.put("jim", 12);
map.put("stark", 13);
map.put("vic", 14);
Set keys = map.keySet();
for(Object k:keys) {
System.out.println(map.get(k));
}
for(Object k:keys) {
String key =(String)k;
if(key.equals("stark")) {
map.remove(key);
}
}
System.out.println("after modifn");
for(Object k:keys) {
System.out.println(map.get(k));
}
me dieron el resultado
12
11
10
14
13
after modifn
12
11
10
14
También he intentado usar un iterador
Iterator<String> itr = keys.iterator();
while(itr.hasNext()) {
String key = itr.next();
if(key.equals("stark")) {
map.remove(key);
}
}
No he tenido ningún ConcurrentModificationException
en cualquiera de los casos esto porque ..es (de javadoc)
el comportamiento a prueba de fallas de un itera no se puede garantizar como es, en general, es imposible hacer ninguna garantía dura en la presencia de de modificación concurrente no sincronizada. Fail-fast iteradores tiran ConcurrentModificationException sobre una base de mejor esfuerzo
he comprobado otra thread que dice, arrojará ConcurrentModificationException
..what qué te parece?
Intenta llamar a 'clear()' en vez de 'remove()'. – Bringer128