Maison >Java >javaDidacticiel >Pourquoi est-il dangereux d'utiliser `remove()` dans la boucle foreach de Java lors de l'itération des 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!