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

  FORUM HardWare.fr
  Programmation
  Java

  [Résolu] Probleme d'unicité dans un HashSet

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Probleme d'unicité dans un HashSet

n°2039422
bibiwood
In Google We Trust
Posté le 01-12-2010 à 14:44:12  profilanswer
 

J'ai le problème suivant, un HashSet accepte deux éléments identique.
Le code pour mettre le probleme en évidence:
 

Code :
  1. Couple c1=new Couple(1,1);
  2.   System.out.println(c1.hashCode());
  3.   Couple c2=new Couple(1,1);
  4.   System.out.println(c2.hashCode());
  5.   System.out.println(c1.equals(c1));
  6.   System.out.println(c1.equals(c2));
  7.   HashSet<Couple> h=new HashSet<Couple>();
  8.   System.out.println(h.add(c1));
  9.   System.out.println(h);
  10.   System.out.println(h.add(c1));
  11.   System.out.println(h);
  12.   System.out.println(h.add(c2));
  13.   System.out.println(h);


 
Qui me renvoie le résultat suivant:
 

2
2
true
true
true
[(1,1)]
false
[(1,1)]
true
[(1,1), (1,1)


 
La class Couple, ou j'ai bien défini la méthode equals() et hashCode():

Code :
  1. public class Couple {
  2. /**Attribut repr�sentant l'abscisse*/
  3. private int x;
  4. /**Attribut repr�sentant l'ordonn�e*/
  5. private int y;
  6. public int hashCode(){
  7.  return this.x+this.y;
  8. }
  9. public boolean equals(Couple p){
  10.  return ((this.x==p.x) && (this.y==p.y));
  11. }
  12. }


 
Need help, arrachage de cheveux en cours.  [:blessure]


Message édité par bibiwood le 01-12-2010 à 15:36:13
mood
Publicité
Posté le 01-12-2010 à 14:44:12  profilanswer
 

n°2039434
bibiwood
In Google We Trust
Posté le 01-12-2010 à 15:35:31  profilanswer
 


Solution trouvé:

HashSet is going to call the equals(Object) method, not
the equals(MyString) method. Since you have not overridden
equals(Object), you wind up using the version from Object
itself, which declares any two objects different unless they
are in fact the same instance.


 
Il faut ecrire une methode equals(Object p) et non equals(Couple p).
La version corrigée:

Code :
  1. public boolean equals(Object p){
  2.  if ( p instanceof Couple){
  3.   Couple nc=(Couple)p;
  4.   return ((this.x==nc.x) && (this.y==nc.y));
  5.  }
  6.  else return false;
  7. }


n°2039444
mr simon
Posté le 01-12-2010 à 16:31:40  profilanswer
 

Une bonne habitude est d'utiliser l'annotation "@Override", ca permet d'eviter les erreur de ce type, le compilateur t'aurai donne un message d'erreur.
 
Ensuite, pour la surcharge des methodes hashCode() et equals(), je te conseille de jeter un coup d'oeil sur ce lien (meme si pour ton cas, ton implementation est tres bien), http://java.sun.com/developer/Book [...] apter3.pdf

n°2039475
bibiwood
In Google We Trust
Posté le 01-12-2010 à 18:39:56  profilanswer
 


Ok merci je prendrais le temps de jeter un coup d'oeil.  
De toute facon faudra que je revienne sur le HashCode pour optimiser tout ca un peu plus tard.


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

  [Résolu] Probleme d'unicité dans un HashSet

 

Sujets relatifs
Gros problème d'antislash et quoteProblème balise meta
Problème MACRO filtre auto passage v2007 - v2003[CSS] Problème avec .class et id
[Python 2.7]Py2exe - probleme de dépendancesProblème avec des listes à puces décalées.
[Java]Petit problème interface graphiqueProbleme URL Rewrite
Débutant, problème master mind en C.probléme en commande batch
Plus de sujets relatifs à : [Résolu] Probleme d'unicité dans un HashSet


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