Possible Duplicates:
Java: Efficient Equivalent to Removing while Iterating a Collection
Removing items from a collection in java while iterating over it¿Cómo puedo iterar sobre un objeto mientras lo modifico en Java?
estoy tratando de bucle a través de HashMap
:
Map<String, Integer> group0 = new HashMap<String, Integer>();
... y extraer todos los elementos de group0
. Este es mi enfoque:
// iterate through all Members in group 0 that have not been assigned yet
for (Map.Entry<String, Integer> entry : group0.entrySet()) {
// determine where to assign 'entry'
iEntryGroup = hasBeenAccusedByGroup(entry.getKey());
if (iEntryGroup == 1) {
assign(entry.getKey(), entry.getValue(), 2);
} else {
assign(entry.getKey(), entry.getValue(), 1);
}
}
El problema aquí es que cada llamada a assign()
eliminará los elementos de group0
, modificando así su tamaño, lo que provoca el error siguiente:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
at java.util.HashMap$EntryIterator.next(HashMap.java:834)
at java.util.HashMap$EntryIterator.next(HashMap.java:832)
at liarliar$Bipartite.bipartition(liarliar.java:463)
at liarliar$Bipartite.readFile(liarliar.java:216)
at liarliar.main(liarliar.java:483)
Entonces ... ¿cómo ¿Puedo recorrer los elementos en group0
mientras está cambiando dinámicamente?
Haga una copia del mapa group0 y elimine los elementos de la copia mientras recorre el grupo0? – sarahTheButterFly
@sarah ... buen punto. Voy a intentar eso. – Hristo
@sarah ...copiar sobre group0 a un clon HashMap me da el problema que cuando elimino del group0, también lo remuevo del clon. ¿Cómo puedo superar eso? ¿Cómo hago una copia independiente de group0? – Hristo