Maison >Java >javaDidacticiel >Comment supprimer en toute sécurité des éléments d'une collection lors d'une itération en Java ?

Comment supprimer en toute sécurité des éléments d'une collection lors d'une itération en Java ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-13 09:10:19876parcourir

How to Safely Remove Elements from a Collection While Iterating in Java?

Suppression d'éléments des collections lors d'une itération

Lorsque vous travaillez avec des collections, il devient nécessaire de modifier ou de supprimer des éléments lors de l'itération. Cependant, la modification d'une collection lors d'une itération peut conduire à une ConcurrentModificationException. Pour éviter cela, plusieurs approches existent :

Itérer sur une copie de la collection

Une approche consiste à créer une copie de la collection avant d'itérer. Cela vous permet de modifier la copie sans affecter la collection originale. Voici un exemple :

List<Foo> fooListCopy = new ArrayList<>(fooList);
for (Foo foo : fooListCopy) {
    // Modify actual fooList
}

Utilisation de l'itérateur de la collection réelle

Une approche alternative consiste à utiliser l'itérateur de la collection réelle. Cette approche vous permet de modifier la collection lors de l'itération. Voici un exemple :

Iterator<Foo> itr = fooList.iterator();
while (itr.hasNext()) {
    // Modify actual fooList using itr.remove()
}

Considérations pour le choix d'une approche

Le choix entre ces approches dépend de plusieurs facteurs :

  • Type de collection : La première approche fonctionne avec n'importe quelle collection, tandis que la seconde approche ne fonctionne qu'avec les collections qui prennent en charge les itérateurs. (par exemple, des listes, des ensembles).
  • Lisibilité :La première approche peut être plus facile à lire et à comprendre, en particulier pour les débutants.
  • Performance : La deuxième approche est plus efficace car elle ne nécessite pas de créer une copie de la collection.
  • Non pris en charge Supprimer Opération : La méthode Iterator.remove() est facultative, donc tous les itérateurs ne prennent pas en charge la suppression d'éléments. La première approche évite ce problème en utilisant à la place la méthode Collection.removeAll().

Techniques supplémentaires pour supprimer des éléments

En plus de ces approches, Java 8 propose plusieurs autres techniques pour supprimer des éléments au cours de l'itération, notamment :

  • Basé sur le flux Suppression : Utilisation d'opérations de flux telles que removeIf() ou filter() avec collect().
  • ListIterator : Utilisation de ListIterator.next() pour itérer et ListIterator.remove() pour supprimer des éléments.
  • Sous-liste ou sous-ensemble : Si la collection est triée, créer une sous-liste ou Le sous-ensemble et son effacement peuvent supprimer efficacement des éléments consécutifs.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn