Donc, si je tente de supprimer des éléments d'un Java HashSet tout itérer, je reçois un ConcurrentModificationException. Quel est le meilleur moyen de supprimer un sous-ensemble d'éléments d'un HashSet comme dans l'exemple suivant?supprimer des éléments d'un HashSet tout Itération
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);
est ici une solution, mais je ne pense pas qu'il est très élégant:
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);
Merci!
Je préfère 'for' à' while', mais chacun à lui-même. –
J'utilise aussi 'for' moi-même. J'ai utilisé 'while' pour espérer rendre l'exemple plus clair. –
Je préfère principalement 'for' car la variable itérateur est alors limitée à la portée de la boucle. –