É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!