Maison >Java >javaDidacticiel >La suppression d'éléments lors d'une boucle Java For-Each est-elle sûre et comment peut-elle être effectuée correctement ?
Supprimer des éléments d'une collection pendant une itération
En Java, modifier le contenu d'une collection lors d'une itération à l'aide d'une boucle foreach peut entraîner des problèmes inattendus comportement et exceptions. La question se pose de savoir si la suppression d'éléments de la collection dans ce contexte est autorisée.
Concernant la légalité de la suppression d'éléments dans une boucle foreach comme dans l'exemple fourni :
List<String> names = .... for (String name : names) { // Do something names.remove(name). }
La réponse est oui, il est légal de supprimer des éléments dans une boucle foreach. Cependant, il est essentiel de noter que l'itérateur de la collection peut devenir invalide après la suppression d'un élément, conduisant potentiellement à une ConcurrentModificationException.
De plus, supprimer des éléments qui n'ont pas encore été itérés (comme dans le deuxième exemple) est interdit. L'implémentation de l'itérateur peut ou non gérer de tels scénarios avec élégance. Pour éviter des problèmes potentiels, assurez-vous de parcourir tous les éléments avant d'essayer d'en supprimer.
Utiliser un itérateur pour une suppression en toute sécurité
Pour supprimer des éléments en toute sécurité pendant l'itération, il est Il est recommandé d'utiliser un objet Iterator explicite. Un itérateur fournit un contrôle direct sur le processus de suppression et garantit que la collection reste valide tout au long de la boucle.
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(); }
En utilisant un itérateur, vous pouvez supprimer des éléments en toute sécurité sans risquer d'exceptions ou d'états de collection invalides.
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!