Bonjour à tous,

En utilisant un for et un remove simultanément, j'ai rencontré une ConcurrentModificationException sur cette construction:


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
    HashMap<String,String> h = new HashMap<String,String>();
    h.put("mot1","foo");
    h.put("mot2","bar");
    h.put("mot3","foobar");
    for (String key: h.keySet()) {
      if (h.get(key).equals("bar")) 
        h.remove(key);
    }
... ce qui est une erreur de débutant classique semble-t-il. La construction suivante est-elle une manière correcte de la contourner ? Je saisis mal le fait que la méthode() remove s'applique bien à l'élément qui avait été sélectionné par l'appel à next().


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
    Iterator<String> it = h.keySet().iterator();
    while (it.hasNext()) {
      if (h.get(it.next()).equals("bar"))
        it.remove();
    }
Cordialement,

G.