Définir sa propre classe comme clé dans java Hashmap
J'ai une classe qui je veux configurer comme clés dans la table de hachage. J'ai déjà mis en œuvre la méthode compareTo pour la classe. Mais quand je fais:
carte.mettre(nouveau Maclé(dummyArguements) , dummyValue ); Système..println(la carte.get( nouveau Maclé(dummyArguements) ) );
- Je obtenir la valeur null.
Ce qui signifie que la table de hachage n'est pas en mesure d'identifier que les deux clés (pour obtenir des & put /call) sont les mêmes.
Quelqu'un pourrait m'aider s'il vous plaît ici ?
source d'informationauteur Nikhil Garg
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour mettre en œuvre
hashCode()
etequals()
.compareTo()
est en outre nécessaire pour triées de la carte/set.Voir cette question pour plus de détails.
Vous devez mettre en œuvre
equals()
ethashCode()
. Votre classe doit également être immuable. Si il est mutable, c'est le code de hachage peut changer après l'ajouter à la carte. Ensuite, la carte peut avoir du mal à la trouver.1) En général, pour les collections, ce que vous voulez remplacer est la méthode equals () (et aussi le hashcode() la méthode) pour votre classe. compareTo()/Comparables et la Comparaison sont généralement utilisés pour le tri et de ne prendre la place de l'utilisation de la méthode equals() pour l'objet equivalance dans certains cas - par exemple, la mise en œuvre de SortedSet comme TreeSet.
2) s'il vous Plaît se conformer à des normes de nommage Java dans votre code. Vos noms de classe doivent être capitalisés... e.g
new MyKey(dummyArguments)
. Voir http://www.oracle.com/technetwork/java/codeconventions-135099.html#367 (et http://www.oracle.com/technetwork/java/codeconvtoc-136057.html) pour plus de détails.HashMap
ne vérifie pascompareTo()
;HashMap
vérifiehashCode()
etequals()
.Lors de l'utilisation de Collections qui s'appuient sur le hachage comme une Carte, et vous avez à mettre en œuvre les
equals()
ethashCode()
pour garantir un fonctionnement correct. Si vous n'avez pas un nouveau maclé sera toujours différente de la clé stockée dans la carte, car il utilise les implémentations par défaut deequals()
ethashCode()
.Vous devez implémenter equals() et hashCode(). Votre classe doit également être immuable. Si il est mutable, c'est le code de hachage peut changer après l'ajouter à la carte. Ensuite, la carte peut avoir du mal à la trouver.
Avez-vous le
hashCode()
défini?compareTo
est nécessaire pour le tri.De java8 vous devez également mettre en œuvre Comparable (en ajoutant compareTo) parce que si le nombre de hachage affrontements dépasse les 11, HashMap stocke les entrées dans un arbre binaire. Si vous ne le faites pas, les performances souffre