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!