Maison >Java >javaDidacticiel >Comment supprimer en toute sécurité des éléments d'une ArrayList pendant l'itération ?

Comment supprimer en toute sécurité des éléments d'une ArrayList pendant l'itération ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-17 08:25:25426parcourir

How to Safely Remove Elements from an ArrayList During Iteration?

Éviter les exceptions de modification simultanées lors de la suppression d'éléments de ArrayList pendant l'itération

Modifier une collection tout en l'itérant à l'aide de la boucle for avancée (for- chaque boucle) peut conduire à la fameuse ConcurrentModificationException. Cela se produit lorsqu'une tentative est faite pour supprimer un élément d'une ArrayList pendant une itération.

Cause :

La boucle for crée une copie de la liste en interne et parcourt cette copie. Lorsqu'un élément est supprimé de la liste d'origine, la taille de la copie est immédiatement réduite, ce qui entraîne l'invalidation de l'index de l'élément actuel.

Solution :

Pour éviter ce problème, utilisez un itérateur avec la méthode Remove().

Itérateur Approche :

Un itérateur est un objet qui parcourt les éléments d'une collection. Il a des méthodes comme hasNext, qui vérifie s'il y a plus d'éléments, et next, qui renvoie l'élément suivant. L'utilisation d'un itérateur permet une suppression en toute sécurité pendant l'itération.

Iterator<String> iter = myArrayList.iterator();

while (iter.hasNext()) {
    String str = iter.next();

    if (someCondition)
        iter.remove();
}

Dans cette approche, l'itérateur conserve son état interne, garantissant que l'index reste valide même après la suppression d'un élément. La méthode iter.remove() supprime en toute sécurité l'élément actuel de la liste d'origine.

Remarque : Cette approche est plus efficace que l'utilisation d'une boucle for traditionnelle avec un index car elle ne nécessite pas conserver une variable d'index distincte et la mettre à jour après chaque suppression.

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