Maison >Java >javaDidacticiel >Pourquoi est-il dangereux d'utiliser `remove()` dans la boucle foreach de Java lors de l'itération des collections ?

Pourquoi est-il dangereux d'utiliser `remove()` dans la boucle foreach de Java lors de l'itération des collections ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-18 04:16:11128parcourir

Why is it Dangerous to Use `remove()` in Java's foreach Loop When Iterating Collections?

Itération et suppression dans les collections Java : les dangers de remove() dans les boucles foreach

Java fournit la construction de boucle foreach pratique pour itérer collections. Cependant, des précautions doivent être prises lorsque vous tentez de supprimer des éléments de la collection lors d'une itération à l'aide de cette boucle.

Suppression légale dans les boucles foreach

Lors d'une itération avec une boucle foreach, la collection itérée ne doit en aucun cas être modifiée sauf via l'itérateur de la boucle. L'appel direct de remove() sur la collection entraînera une exception inattendue.

Utiliser Iterator pour une suppression sécurisée

Pour supprimer en toute sécurité des éléments pendant l'itération, il est essentiel de utilisez un itérateur. Sa méthode Remove() est conçue pour gérer les suppressions de la collection sous-jacente sans provoquer de comportement inattendu.

Code Java Voici :

List<String> names = ...
Iterator<String> i = names.iterator();
while (i.hasNext()) {
    String s = i.next(); // Must be called before i.remove()
    // Do something
    i.remove();
}

Exception de modification simultanée

Comme indiqué dans la documentation Java, "face à une modification simultanée, l'itérateur échoue rapidement et proprement" en lançant une ConcurrentModificationException. Cette exception garantit que l'itérateur identifie et signale le problème au cours de l'itération problématique, plutôt que de provoquer un comportement imprévisible plus tard.

Itérateur caché dans foreach

Il est important de noter ces boucles foreach créent implicitement un itérateur qui reste inaccessible au programmeur. En raison de cet itérateur caché, les modifications directes apportées à la collection à l'aide de remove() lors d'une itération avec foreach peuvent entraîner des exceptions inattendues.

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