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 de la hashmap


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 69
    Par défaut parcours de la hashmap
    Bonjour tout le monde, j'essaye de parcourir une HashMap ;
    je prend le premier élément de la map qui est un tableau d'entiers et je le compare avec les éléments restants .

    Le code n'affiche aucun résultat. c'est comme si il n'existe qu'un seul élément dans le map. je crois que ma façon de parcourir le hashmap est fausse.Pouvez vous m'aider
    Le code est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    Iterator it = cles.iterator();
    			          String cle1,cle2;
    			          int[][]pixels1,pixels2;
    			          //System.out.println("je vérifie:");
    			    	 for(int i=0;i<=hash.size();i++)
    			    	 {
    			    		 if(it.hasNext())
    			    		 {
    			    			 cle1=(String) it.next();  System.out.println(cle1);
    			    			 pixels1=hash.get(cle1);
     
                                                                              for(int j=i+1;j<=hash.size();j++)
    			    			 {
    			    				 if(it.hasNext())
    			    				 {
    			    					 cle2=(String) it.next();
    			    					 pixels2=hash.get(cle2);
    			    					 String key=cle1+cle2;
    			    					 int[][]intersect=intersection(pixels1,pixels2);
    			    					 if(intersect!=null)
    			    					 {
     
     
    			    						 Object[] args=new Object[4];
    			    						 args[0]=intersect;
    			    						 args[1]=cle1;
    			    						 args[2]=cle2;
    			    						 args[3]=seg;
    			    						// createNewAgent(key,"helloworldagent.Focalisant", args);
    			    					 }
     
    			    				 }
    			    			 }
    			    		 }
    			    	 }

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Le code me semble si maladroit qu'il est difficile de savoir s'il est faux !

    Quelques éléments d'amélioration :

    - quand tu fais un parcours de quelque chose, ne parcoure que cette chose, avec un seul système d'index, selon une seule voie : pas de hash.size() d'un coté, de iterator de l'autre, etc.
    - on ne fait pas 36 iterator.next dans un même passage de boucle, sinon cela risque de désynchroniser complètement l'index et la valeur !
    - on ne modifie pas la liste parcourue pendant son parcours (je ne sais pas si tu le fais là, mais comme c'est une mauvaise habitude frequente...)

    Bien sûr, comme toujours, ces règles peuvent avoir des exceptions, mais pour ces règles ci c'est très rare.

    Pour avancer, je te suggère de commencer en basant ton parcours soit sur le hash.size, soit sur le iterator.

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 69
    Par défaut
    Pour avancer, je te suggère de commencer en basant ton parcours soit sur le hash.size, soit sur le iterator.
    je ne peux pas parcourir la liste avec une hash.size car je ne connais pas les clés pour accéeder aux valeurs donc je dois utiliser le iterator.

    je dois aussi récuper chaque élément de la liste et le comparer avec les autres éléments de la liste.
    C'est pour cette raioson que j'utilise deux fois le it.next( le premier pour récupérer le premier élément de la liste et le deuxième pour parcourir le rèste) voici une simplification de mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     for(int i=0; i<hash.size;i++)
       {
       if(it.hasnext)
           {
           cle1=it.next;
           hash.get(cle);
            for(int j=i+1; j<hash.size;j++)
              {
                 if(it.hasnext)
                  {
                 cle2=it.next;
                 hash.get(cle2);
                 //comparer les contenus
                   }
               }
         }
    }

  4. #4
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Pouf pouf pouf pouf !

    Souvent, quand on doit comparer des éléments entres eux, il y a une notion d'ordre quelque part. Si c'est le cas pour toi, ne pourrais-tu pas employer un TreeMap , qui te donnera un cadre plus adapté ?

    Ensuite, j'ai l'impression que tu utilises le même iterator pour le parcours et pour voir si l'élément parcouru est présent ailleurs. Bref tes iterator avancent trop vite ai-je le sentiment.

    Par ailleurs pourrais-tu expliquer ce que tu veux faire en bon français, cela faciliterait notre tâche, ou au moins montrer des sources qui compilent, c'est mille fois plus facile à comprendre pour ceux qui t'aident.

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 69
    Par défaut
    Bonjour, mon problème est résolu.
    Ma faute était l'utilisation du même iterator pour deux parcours de la liste.
    Par ailleurs pourrais-tu expliquer ce que tu veux faire en bon français,
    Je crois que c'était bien clair:récupérer chaque élément d'une liste et le comparer avec les éléments restants

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'un HashMap
    Par popy67 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 03/01/2011, 22h28
  4. Parcours d'une Hashmap et suppression d'un élément
    Par gobgob dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 24/09/2008, 20h50
  5. Parcours d'une HashMap (java)
    Par basket10 dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 28/03/2007, 16h06

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