Por lo tanto, si intento para eliminar los elementos de un HashSet Java mientras que la iteración, consigo un ConcurrentModificationException. ¿Cuál es la mejor manera de eliminar un subconjunto de elementos de un HashSet como en el siguiente ejemplo?eliminar elementos de un HashSet al iterar
Set<Integer> set = new HashSet<Integer>();
for(int i = 0; i < 10; i++)
set.add(i);
// Throws ConcurrentModificationException
for(Integer element : set)
if(element % 2 == 0)
set.remove(element);
Aquí es una solución, pero no creo que es muy elegante:
Set<Integer> set = new HashSet<Integer>();
Collection<Integer> removeCandidates = new LinkedList<Integer>();
for(int i = 0; i < 10; i++)
set.add(i);
for(Integer element : set)
if(element % 2 == 0)
removeCandidates.add(element);
set.removeAll(removeCandidates);
Gracias!
Prefiero 'for' a' while', pero cada uno por su cuenta. –
También uso 'for'. Usé 'while' para, con suerte, aclarar el ejemplo. –
Opino 'for' sobre todo porque la variable del iterador está entonces limitada al alcance del ciclo. –