HashMap

la7su

Nouveau membre
Bonjour,

J'ai un soucis concernant les HashMap de java : lorsqu'on fait un remove (pour retirer un element de la HashMap) ou un get (pour recuperer un element) java fait normalement appel à la fonction equals implementer dans l'Object qui nous sert de key.
Dans mon cas, la key est une classe PLCKey dans laquelle j'ai code la methode equals :
public boolean equals(Object obj)
{
...
}
Mon probleme est que lors d'un remove ou d'un get, cette methode equals n'est jamais appelee.

A priori, le probleme ne vient pas de ma methode puisque si je transforme la HashMap en Vector et que je fais un remove sur le Vector, je constate que ma methode equals est bien appelee.

Si quelqu'un peut m'aider (ou si je n'ai pas ete assez clair)...
 

Athropos

Grand Maître
Le test est d'abord fait sur le hashcode de l'objet, et ensuite si les deux hash sont égaux, la méthode equals() est appelée. Dans ton cas, je suppose que le hash des deux objets est différent, ce qui fait que ta méthode equals n'est jamais appelée.
Essaie de rajouter cette méthode dans ton objet en plus de ta méthode equals():

[cpp]
public int hashCode()
{
return 1;
}
[/cpp]

Avec ca tout tes objets auront le même hash, et ta méthode equals() sera bien appelée. Par contre, niveau performances de la HashMap, ca va plus être terrible [:red is dead]
 

Athropos

Grand Maître
J'ai réfléchi :)

Comme hashcode, tu peux utiliser la méthode de String. Donc il te faudrait redéfinir la méthode toString(), si ce n'est pas déjà fait, en t'arrangeant pour qu'elle représente bien les différents champs de ton objet. Ensuite, tu n'as plus qu'à redéfinir la méthode hashcode() comme ca:

[cpp]
public int hashCode()
{
return toString().hashCode();
}
[/cpp]

Je suppose que la méthode hashCode() de String est bien faite, donc avec ca ta hashMap marchera aussi bien et ta méthode equals() sera appelée quand il faut.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 079
Membres
1 586 395
Dernier membre
franckorus
Partager cette page
Haut