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
DDDoriginal
2024-12-21 01:02:13176parcourir

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).
}

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));
}

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();
}

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!

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