Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1397 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Traitement de LinkedHashMap

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Traitement de LinkedHashMap

n°2237507
ahmadou_20
Posté le 09-09-2014 à 22:11:36  profilanswer
 

Bonjour,
 
J ai une question a laquelle je ne trouve pas de reponse et je suis completement bloque. c est pourquoi je me tourne vers vous en esperant en avoir une chez vous.
 
j ai cree une classe duo tres simple qui a deux elements.
 

Code :
  1. public  class Duo  {
  2. int a;
  3. int b;
  4. public Duo(int a, int b){
  5.  this.a = a;
  6.  this.b = b;
  7. }
  8. /**
  9.  * @return the a
  10.  */
  11. public int getA() {
  12.  return a;
  13. }
  14. /**
  15.  * @param a the a to set
  16.  */
  17. public void setA(int a) {
  18.  this.a = a;
  19. }
  20. /**
  21.  * @return the b
  22.  */
  23. public int getB() {
  24.  return b;
  25. }
  26. /**
  27.  * @param b the b to set
  28.  */
  29. public void setB(int b) {
  30.  this.b = b;
  31. }
  32. }


 
Apres, en partant d une liste [0,1,2,3,4], je cree une LinkedHashMap avec comme cle un Duo et comme valeur un Integer dans laquelle je stocke :  
 

Code :
  1. Key : (0,1) -->>  Value 1
  2. Key : (0,2) -->>  Value 2
  3. Key : (0,3) -->>  Value 3
  4. Key : (0,4) -->>  Value 4
  5. Key : (1,2) -->>  Value 5
  6. Key : (1,3) -->>  Value 6
  7. Key : (1,4) -->>  Value 7
  8. Key : (2,3) -->>  Value 8
  9. Key : (2,4) -->>  Value 9
  10. Key : (3,4) -->>  Value 10


 
ce que j obtiens par le code suivant :
 
 

Code :
  1. LinkedHashMap<Duo, Integer> map = new LinkedHashMap<Duo, Integer>();
  2. List<Integer> values = Arrays.asList(0,1,2,3,4);
  3. int index = 1;
  4. for(Integer value : values){
  5.  int position = values.indexOf(value);
  6.  List<Integer> nextValues = values.subList(position + 1, values.size());
  7.  for(Integer nextValue : nextValues){
  8.   Duo duo = new Duo(value, nextValue);
  9.   map.put(duo, index);
  10.   index++;
  11.  }
  12. }
  13. Iterator<Duo> iterator = map.keySet().iterator();
  14. while (iterator.hasNext()) {
  15.  Duo key = iterator.next();
  16.  int a = key.getA();
  17.  int b = key.getB();
  18.         System.out.println("Key : (" + a + ","+ b + " ) -->> "+  " Value " + map.get(key));
  19. }


 
Rien de magique jusque la !!
 
Les ennuis commencent a partir du moment ou je veux recuperer le contenu de ma LinkedHashMap par le code suivant :
 
 
   

Code :
  1. for(Integer value : values){
  2.    
  3.       int position = values.indexOf(value);
  4.    List<Integer> nextValues = values.subList(position + 1, values.size());
  5.       for(Integer nextValue : nextValues){
  6.        Duo duo = new Duo(value, nextValue);
  7.           System.out.println("Value " + map.get(duo));
  8.   }
  9.  }


 
Sauf que je n obtiens que des Null. Et je ne sais pas ce qui se passe.
 
N.B. Peut etre il y d autres moyens pour le faire mais je tiens a utiliser une boucle for (pour parcourir la liste values value par value) pour des considerations reltives au resultat final auquel je compte aboutir (et que je n ai pas presente ici pour ne pas etre trop long)..........  
 
Merci encore une fois de votre aide.

mood
Publicité
Posté le 09-09-2014 à 22:11:36  profilanswer
 

n°2237526
lasnoufle
La seule et unique!
Posté le 10-09-2014 à 01:09:51  profilanswer
 

[:sombrero67]

 

Si c'est une question serieuse, en gros:
- tu utilises une structure de donnees (LinkedHashMap) qui a besoin de verifier l'egalite entre les cles
- tu definis ta classe Duo sans definir l'egalite entre ses instances; du coup, elle va utiliser l'egalite par defaut qui est juste de comparer l'adresse en memoire (en gros)
- du coup, ton premier Duo que tu utilises pour inserer etant une instance differente que celui que tu crees plus tard pour recuperer la valeur, les addresses en memoire ne sont pas les memes et la map se comporte comme prevu: tu lui passes une cle qu'elle ne connait pas, du coup elle ne retourne rien.

 

Pour faire ce que tu veux, il faut que tu "overrides" les methodes equals() et hashcode() de ta classe Duo, par exemple:

public boolean equals(Object object) {
 return (object instanceof Duo && ((Duo)object).getA() == this.a  && ((Duo)object).getB() == this.b);
}

 

public int hashCode() {
 return a * 31 + b;
}


En remarque accessoire, lire la doc, ca aide aussi.


Message édité par lasnoufle le 10-09-2014 à 01:10:17

---------------
C'était vraiment très intéressant.
n°2237546
ahmadou_20
Posté le 10-09-2014 à 09:29:25  profilanswer
 

Ok merci c est fait.  
 
Et ca marche.
 
Merci bcp


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Traitement de LinkedHashMap

 

Sujets relatifs
Traitement des réponses d'un quiz en Phpsuppression de doublons après traitement de la seule copie restante
Projet traitement image PGM et Scale TkinterFormulaire de contact + traitement
[Javascool] Projet traitement d'image pour le BacMon fichier traitement.php ne fonctionne pas
Web service et traitement des exceptionsPHP - Traitement long sans blocage du navigateur ?
OVH Mutualisé et traitement longCode pour exécuter un traitement différent si un mobile est détecté.
Plus de sujets relatifs à : Traitement de LinkedHashMap


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR