En Java, obj.hashCode()
renvoie une valeur. A quoi sert ce code de hachage en programmation?
hashCode()
est utilisé pour les applications Hash
comme HashMap
, HashTable
, HashSet
, etc.
La valeur reçue de hashCode()
est utilisée comme numéro de compartiment pour stocker des éléments de l’ensemble / map. Ce numéro de compartiment est l’ adresse de l’élément à l’intérieur de l’ensemble / map.
Lorsque vous le faites, il contains()
le code de hachage de l’élément, puis recherche le compartiment dans lequel le code de hachage pointe. Si plus d’un élément est trouvé dans le même compartiment (plusieurs objects peuvent avoir le même code de hachage), alors il utilise la méthode equals()
pour évaluer si les objects sont égaux, puis décider s’il contains()
true ou false. ou décider si un élément peut être ajouté ou non à l’ensemble.
Du Javadoc :
Renvoie une valeur de code de hachage pour l’object. Cette méthode est prise en charge pour les hashtables tels que ceux fournis par java.util.Hashtable
.
Le contrat général de hashCode
est:
Chaque fois qu’il est appelé sur le même object plus d’une fois lors de l’exécution d’une application Java, la méthode hashCode
doit systématiquement renvoyer le même entier , à condition qu’aucune information utilisée dans les comparaisons d’égal à égal sur l’object ne soit modifiée. Cet entier ne doit pas nécessairement restr cohérent d’une exécution d’une application à une autre exécution de la même application.
Si deux objects sont égaux selon la méthode equals(Object)
, alors l’appel de la méthode hashCode
sur chacun des deux objects doit produire le même résultat entier.
Il n’est pas obligatoire que si deux objects sont inégaux selon la méthode d’ equals(java.lang.Object)
à equals(java.lang.Object)
, alors l’appel de la méthode hashCode
sur chacun des deux objects doit produire des résultats entiers distincts. Cependant, le programmeur doit savoir que produire des résultats entiers distincts pour des objects inégaux peut améliorer les performances des hashtables.
Dans la mesure du possible, la méthode hashCode définie par la classe Object renvoie des entiers distincts pour des objects distincts. (Ceci est généralement implémenté en convertissant l’adresse interne de l’object en un entier , mais cette technique d’implémentation n’est pas requirejse par le langage de programmation Java.)
La valeur renvoyée par
hashCode()
est le code de hachage de l’object, qui correspond à l’adresse mémoire de l’object en hexadécimal.Par définition, si deux objects sont égaux, leur code de hachage doit également être égal. Si vous substituez la méthode
equals()
, vous modifiez la façon dont deux objects sont mis en équivalence et l’implémentation dehashCode()
Object n’est plus valide. Par conséquent, si vous remplacez la méthode equals (), vous devez également remplacer lahashCode()
.
Cette réponse provient de la documentation du tutoriel officiel java SE 8
Bien que le hashcode ne fasse rien avec votre logique métier, nous devons nous en occuper dans la plupart des cas. Parce que lorsque votre object est placé dans un conteneur de hachage (HashSet, HashMap …), le conteneur place / obtient le code de hachage de l’élément.
hashCode()
est une fonction qui prend un object et affiche une valeur numérique. Le code de hachage d’un object est toujours le même si l’object ne change pas.
Des fonctions telles que HashMap
, HashTable
, HashSet
, etc. qui ont besoin de stocker des objects utiliseront un hashCode
modulo de la taille de leur tableau interne pour choisir dans quelle “position de mémoire”
Il y a des cas où des collisions peuvent se produire (deux objects se retrouvent avec le même code de hachage), ce qui, bien sûr, doit être résolu avec soin.
Hashcode est un code unique généré par la JVM pour chaque création d’object. Nous utilisons un hashcode pour effectuer des opérations sur le hachage de l’algorithme, comme la table de hachage, hashmap, etc. un object que le code unique aide à trouver cet obj. Mais on ne peut pas dire que le hashcode est l’adresse d’un object. Il s’agit d’un code unique généré par JVM pour chaque object. Il est maintenant l’algorithme de hachage journalier. L’algorithme de recherche le plus populaire.
La méthode hashCode pour une classe donnée peut être utilisée pour tester l’inégalité d’object, mais PAS l’égalité d’object, pour cette classe.
La méthode hashCode est utilisée par la classe de collection java.util.HashSet pour regrouper les éléments de cet ensemble dans des compartiments de hachage pour une récupération rapide.