301 votes

itération sur et retirer une carte

Je faisais :

qui a jeté une ConcurrentModificationException, donc je l’ai changé pour :

cela et toutes les autres procédures qui modifient le plan sont en blocs synchronisés.

y a-t-il une meilleure solution ?

Si personne ne vient avec une meilleure solution, tout d’abord à dire non obtient la tique  ;)

408voto

Gennadiy Points 3154

Voici un exemple de code à utiliser l’itérateur dans une boucle for pour supprimer l’entrée.

109voto

Paul Tomblin Points 83687

Utilisez un itérateur réel.

En fait, vous devrez peut-être itérateur sur le entrySet() au lieu de la keySet() pour faire ce travail.

50voto

Shishir Kumar Points 2273

est-il une meilleure solution?

Eh bien, il y a, certainement, une meilleure façon de le faire dans un seul état, mais cela dépend de la condition basée sur les éléments qui sont supprimés.

Pour exemple: supprimer tous ces éléments, lorsqu' value est test, puis utilisez ci-dessous:

map.values().removeAll(Collections.singleton("test"));

Je sais que cette question est trop vieux, mais il n'y a pas de mal dans la mise à jour de la meilleure façon de faire les choses :)

5voto

Alexander Pogrebnyak Points 24964

Vous devez utiliser `` pour supprimer en toute sécurité l’élément lorsque vous traversez une carte.

4voto

goatlinks Points 593

Je suis d’accord avec Paul Tomblin. J’ai utilise habituellement itérateur du jeu de clés et puis baser mon état outre de la valeur de cette clé :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X