Quindi, se provo a rimuovere gli elementi da un Java HashSet mentre l'iterazione, ho un ConcurrentModificationException. Qual è il modo migliore per rimuovere un sottoinsieme degli elementi da un HashSet come nell'esempio seguente?rimuovere elementi da un HashSet mentre Iterare
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);
Ecco una soluzione, ma non credo che sia molto 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);
Grazie!
Preferisco 'for' a' while', ma ognuno al proprio. –
Uso anche 'for' me stesso. Ho usato 'while' per rendere l'esempio più chiaro. –
I perfer' for' principalmente perché la variabile iteratore è limitata all'ambito del ciclo. –