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 ?

La suppression d'éléments lors d'une boucle Java For-Each est-elle sûre et comment peut-elle être effectuée correctement ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-28 12:54:09561parcourir

Is Removing Elements During a Java For-Each Loop Safe, and How Can It Be Done Correctly?

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!

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