probleme de Hashtable - Java - Programmation
Marsh Posté le 11-12-2002 à 10:38:00
Si tu veux plus d'info sur le hashcode, tu peux trouver un article de benou qui est linké dans la JavaFAQ du forum.
En gros, le hashcode va être utilisé pour comparer tes clés, par défaut il est différent pour chaque objet. Donc en fait il faut que tu surcharges aussi la méthode hashcode(), et que tu trouves un entier qui représente bien ton objet, de manière unique par rapport aux données. Je crois que c'est aussi bien expliqué sur java.sun.com.
J'espère ne pas avoir dit trop de conneries
Marsh Posté le 11-12-2002 à 10:42:31
http://java.sun.com/docs/books/tut [...] s/map.html
je crois que c'est dans ce coin ....
Marsh Posté le 11-12-2002 à 14:53:32
coici l'adresse du post où je parlais du hashCode.
http://forum.hardware.fr/forum2.php3?post=23486&cat=10
attention, je viens de relire et c'est bourré de fautes de frappe et d'orthographes ! j'ai honte
Marsh Posté le 11-12-2002 à 21:43:13
ReplyMarsh Posté le 12-12-2002 à 11:17:49
souk a écrit : |
m'enfin ca ne me dit pas pourquoi ma methode equals n'etait pas appelee avant...si ?
Marsh Posté le 12-12-2002 à 11:22:52
Equals n'est appelée que si les hashcodes sont les mêmes.
Si tu n'as pas redéfini hashcode, c'est possibles que pour deux objets identiques, il ne renvoie pas le même hashcode.
Marsh Posté le 12-12-2002 à 13:37:39
comme je le dis dans le lien, c'est en premier le hashCode qui est appelé sur les objets. Pour les objets qui ont le même hashCode (au modulo près), la méthode equals est utilisée pour les comparer.
Par défaut, la méthode hashCode renvoit l'adresse mémoire de l'objet => le hashCode est différent pour tous les objets => c'est normal que ta méthode equals ne soit jamais appelée.
Remarque : Elle aurait quand même pu être appelée grâce au modulo mais ca arrait été un coup de hasard.
Marsh Posté le 11-12-2002 à 10:33:34
salut, voila mon probleme :
J'ai defini une classe ExchangeObject, qui surdefinit la methode equals heritee de Object. Lorsque j'utilise des instances de cette classe comme cles dans une Hashtable, la methode equals n'est pas appelee (du moins celle que j'ai surdefinie (peut etre la methode equals de Object est-elle appelee, mais les signatures des fonctions sont identiques))
Bref, est-ce normal, est-ce qu'il y a un truc que je fais mal ? (je presume que la reponse a cette question est oui... )
merci d'avance
Souk