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

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

DDD
Libérer: 2024-12-21 01:02:13
original
132 Les gens l'ont consulté

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

Supprimer en toute sécurité des éléments lors d'une itération en Java

Q : Est-il permis de supprimer des éléments d'une collection lors d'une itération à l'aide d'une boucle foreach en Java ?

R : L'utilisation d'une boucle foreach pour la suppression n'est pas conseillé. Cela peut entraîner un comportement inattendu car l'itérateur sous-jacent n'est pas exposé et directement accessible pour modification.

Exemple :

List<String> names = ....
for (String name : names) {
   // Do something
   names.remove(name).
}
Copier après la connexion

Ce code peut échouer avec un java.util .ConcurrentModificationException car l'opération de suppression modifie la collection en dessous pendant que la boucle foreach est en cours.

Q : Pouvons-nous supprimer les éléments qui n'ont pas été itérés déjà ?

R : Non. La suppression d'éléments non encore traités dans la boucle peut entraîner une erreur "index hors limites". Exemple :

//Assume that the names list as duplicate entries
List<String> names = ....
for (String name : names) {
    // Do something
    while (names.remove(name));
}
Copier après la connexion

Pour supprimer en toute sécurité des éléments lors d'une itération, un Iterator doit être utilisé :

List<String> names = ....
Iterator<String> i = names.iterator();
while (i.hasNext()) {
   String s = i.next(); // must be called before you can call i.remove()
   // Do something
   i.remove();
}
Copier après la connexion

La documentation Java souligne que les itérateurs renvoyés par les méthodes iterator et listIterator sont des "échecs". rapide." Toute modification structurelle de la liste en dehors des méthodes de suppression ou d'ajout de l'itérateur entraînera une ConcurrentModificationException.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal