probleme de Hashtable

probleme de Hashtable - Java - Programmation

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

Reply

Marsh Posté le 11-12-2002 à 10:33:34   

Reply

Marsh Posté le 11-12-2002 à 10:35:03    

Et le hashcode alors ???

Reply

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 :D

Reply

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 ....

Reply

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  :sleep:  
 

Reply

Marsh Posté le 11-12-2002 à 21:08:18    

Bon ? et finalement ... ?

Reply

Marsh Posté le 11-12-2002 à 21:43:13    

bobuse a écrit :

Bon ? et finalement ... ?


finalement quoi ?

Reply

Marsh Posté le 12-12-2002 à 01:27:34    

benou a écrit :


finalement quoi ?


 
ben merci bien :jap:

Reply

Marsh Posté le 12-12-2002 à 11:17:49    

souk a écrit :


 
ben merci bien :jap:  


m'enfin ca ne me dit pas pourquoi ma methode equals n'etait pas appelee avant...si ?

Reply

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.

Reply

Marsh Posté le 12-12-2002 à 11:22:52   

Reply

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed