J'ai rencontré cela en écrivant un programme de vendeur itinérant. Pour une boucle intérieure, j'ai essayé un mais lors de l'ajout d'un autre point à cette liste a abouti à un Cependant, Lorsque j'ai changé la boucle sur p> la boucle courut bien sans jeter une exception. p> Ax à la fois A pour les boucles, alors pourquoi vous lancez une exception pendant l'autre ne fait pas? p> p> ConcurrentModicationException code> étant lancé. P>
5 Réponses :
Le premier exemple utilise un itérateur, le second ne le fait pas. C'est l'itérateur qui vérifie la modification simultanée. P>
Le premier code utilise un itérateur afin de modifier la collection n'est pas autorisé. Le deuxième code accède à chaque objet avec x.get (i), donc pas utiliser un itérateur, les modifications sont donc autorisées p>
Vous ne pouvez pas modifier une liste code> pendant que vous êtes itération sur celui que vous faites dans le premier exemple. Dans la seconde, vous avez simplement un
régulier pour code> boucle. P>
Comme d'autres expliquées, l'itérateur détecte des modifications à la collection sous-jacente, et c'est une bonne chose puisqu'il est susceptible de causer un comportement inattendu.
Imaginez ce code sans itérateur qui modifie la collection: P> < Pré> xxx pré> p>
J'ai choisi votre réponse parce que vous avez montré comment les choses pouvaient aller mal lors de l'itération par rapport à l'accès via GET ()
Si vous exécutez le code et vous observe que vous constatez que la première itération de la boucle fonctionne bien, mais la deuxième lancée Si c'est parce que Pour une belle explication, voir http: //javaadami.blogspot. com / 2007/09 / amélioré-for-boucle-and.html p> ConcurrentModicationException code> P>
suivant () code> méthode vérifie si le nombre des éléments n'a pas changé. P>
Dupliqué possible de boucle sur la liste avec Supprimer