IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Parcours d'une Hashmap et suppression d'un élément


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 122
    Par défaut Parcours d'une Hashmap et suppression d'un élément
    Bonjour,

    Je parcours une hashmap et j'aimerais supprimer certains éléments pendant le parcours.

    Je récupère les élement du hashmap avec la méthode entryset de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (Entry<String, MonitoredFile> entry : files.entrySet()) {
      if (test) {
        files.remove(entry.getKey());
      }
    }
    En faisant ça je m'attendais à semer la zizanie avec les Iterators sous jacent. C'est évidemment ce qui a l'air de se passer , voici la stacktrace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Exception in thread "Thread-0" java.util.ConcurrentModificationException
    	at java.util.HashMap$HashIterator.nextEntry(HashMap.java:841)
    	at java.util.HashMap$EntryIterator.next(HashMap.java:883)
    	at java.util.HashMap$EntryIterator.next(HashMap.java:881)
    	at base.Folder.checkFiles(Folder.java:43) //c'est dans cette fonction que je commet l'erreur
    	at base.Folder.scan(Folder.java:37)
    	at base.MonitoredFolder.run(MonitoredFolder.java:17)
    	at java.lang.Thread.run(Thread.java:613)
    Je voudrais donc savoir s'il y a une bonne façon de faire... j'ai pensé à une LinkedList temporaire où stocker les Key des entry à supprimer, il y a surement mieux.

    Merci de votre aide !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,
    Si tu as Java 5+, tu peux utiliser le package concurrent, et notamment ConcurrentHashMap.
    Je ne sais pas si c'est efficace, je n'ai jamais utilisé, mais ca pourrait résoudre ton problème
    Tschau

  3. #3
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Il faut utiliser des Iterator pendant ton parcours et non la syntaxe du for étendu.

    Il faudra ensuite utiliser la méthode remove de l'Iterator.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 122
    Par défaut
    Très bien , merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Soucis de parcours d'une Hashmap
    Par Bourg dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 17/02/2015, 21h14
  2. Parcours d'une hashMap
    Par skulled dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 17/08/2011, 14h44
  3. Parcours d'une HashMap (java)
    Par basket10 dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 28/03/2007, 16h06
  4. [C#] [ADO] Parcours d'une grande quantité d'enregistrements
    Par Wavyx dans le forum Windows Forms
    Réponses: 4
    Dernier message: 21/09/2004, 09h16
  5. [débutant] cherche a copier une HashMap
    Par mathieublanc13 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 09/05/2004, 14h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo