Qu'est-ce que l'utilisation de hashCode en Java?
En Java, obj.hashCode()
retourne une valeur. Qu'est-ce que l'utilisation de ce code de hachage dans la programmation?
- Cette question ajoute un peu plus de détails. stackoverflow.com/questions/18078779/...
- belle explication donnée sur ce post.eclipsesource.com/blogs/2012/09/04/...
Vous devez vous connecter pour publier un commentaire.
hashCode()
est utilisé pour écopage dansHash
implémentations commeHashMap
,HashTable
,HashSet
, etc.La valeur reçue de
hashCode()
est utilisé comme seau nombre pour le stockage des éléments de la série/carte. Ce seau est le numéro adresse de l'élément à l'intérieur de la série/carte.Lorsque vous ne
contains()
il faudra le code de hachage de l'élément, puis chercher le seau où le code de hachage points. Si plus de 1 élément se trouve dans le même seau (plusieurs objets peuvent avoir le même code de hachage), il utilise alors laequals()
méthode pour évaluer si les objets sont égaux, et de décider ensuite sicontains()
est vrai ou faux, ou de décider si un élément peut être ajouté dans le jeu ou pas.equals()
à évaluer", de sorte que si il y a un seul code de hachage appariés élément trouvé, elle renvoie true directement? mais depuis plusieurs objets peuvent avoir le même code de hachage de sorte qu'il a à exécuterequals()
pour évaluer si le contenu de l'élément est égale, sinon, il peut vous donner le résultat inattendu, ai-je le droit?hashCode()
méthode?De la Javadoc:
Renvoie un code de hachage de la valeur de l'objet. Cette méthode est prise en charge pour le bénéfice des tables de hachage, tels que ceux fournis par
java.util.Hashtable
.Les conditions générales du contrat de
hashCode
est:Chaque fois qu'elle est invoquée sur le même objet plus d'une fois lors d'une exécution d'une application Java, la
hashCode
méthode doit constamment revenir le même entier n'a fourni aucune information utilisée dans les égaux des comparaisons sur l'objet est modifié. Cet entier n'a pas besoin de rester cohérent à partir d'une exécution d'une application à une autre exécution de la même application.Si deux objets sont égaux selon le
equals(Object)
méthode, puis en appelant lahashCode
méthode sur chacun des deux objets doit produire le même résultat sous forme d'entier.Il est pas nécessaire que si deux objets sont inégales selon les
equals(java.lang.Object)
méthode, puis en appelant lahashCode
méthode sur chacun des deux objets doivent produire integer distinctes résultats. Toutefois, le programmeur doit être conscient que la production d'un integer distinctes résultats de l'inégalité des objets d'améliorer les performances de tables de hachage.Autant qu'il est raisonnablement pratique, le hashCode de la méthode définie par la classe de l'Objet n'retour distincts entiers pour des objets distincts. (Ce qui est généralement mis en œuvre par la conversion de l'adresse interne de l'objet en entier, mais cette mise en œuvre technique n'est pas exigée par le langage de programmation Java.)
Cette réponse est à partir de la version java SE 8 tutoriel officiel de la documentation
hashCode()
est une fonction qui prend un objet et renvoie une valeur numérique. Le hashcode un objet est toujours le même si l'objet ne change pas.Fonctions comme
HashMap
,HashTable
,HashSet
, etc. qui ont besoin de stocker des objets va utiliser unhashCode
modulo la taille de leur tableau interne de choisir en quoi "la position de mémoire" (c'est à dire la matrice de position) pour stocker l'objet.Il ya certains cas où les collisions peuvent se produire (les deux objets se retrouver avec le même hashcode), et que, bien sûr, doit être résolu avec soin.
Bien que hashcode ne fait rien avec votre logique métier, nous avons à prendre soin d'elle dans la plupart des cas. Parce que quand votre objet est mis dans un hachage en fonction de conteneur(HashSet, table de hachage...), le conteneur met/obtient l'élément de hashcode.
Hashcode est un code unique qui est généré par la JVM pour chaque création d'objet..nous utilisons hashcode pour effectuer une certaine opération sur le hachage liée algorithme de type hashtable,hashmap, etc..les avantages de hashcode est qu'il permet la recherche de l'opération facile bcoz lorsque l'on recherche un objet dont le code unique qui permet de découvrir que l'obj. Mais on ne peut pas dire hashcode est l'adresse de l'obj. Z un code unique généré par la JVM pour chaque objet..c'est y maintenant le jour de l'algorithme de hachage z les plus populaires de l'algorithme de recherche
L'un des usages de hashCode() est la construction d'un mécanisme de Capture.
Regardez cet exemple:
Un hashcode est un nombre généré à partir de n'importe quel objet.
C'est ce qui permet aux objets d'être stockées/retrouver rapidement dans une table de hachage.
Imaginer le simple suivant exemple:
Sur la table en face de vous. vous avez neuf zones, chacune marquée d'un numéro de 1 à 9. Vous avez aussi un tas de très différent des objets à stocker dans ces boîtes, mais une fois qu'ils sont là que vous devez être en mesure de les trouver le plus rapidement possible.
Ce que vous avez besoin est une façon de instantanément décider de la boîte que vous avez mis de chaque objet. Il fonctionne comme un index. vous décidez de trouver le chou si vous regardez quelle case le chou est en, puis aller tout droit vers cette zone pour l'obtenir.
Maintenant, imaginez que vous ne voulez pas vous embêter avec l'index, vous voulez être en mesure de trouver immédiatement à partir de l'objet qui zone dans laquelle il vit.
Dans l'exemple, nous allons utiliser un moyen simple de le faire - le nombre de lettres dans le nom de l'objet. Ainsi, le chou va dans la case 7, la loi va dans la case 3, la fusée dans l'encadré 6, du banjo dans la case 5 et ainsi de suite.
Que sur le rhinocéros, si? Il dispose de 10 caractères, de sorte que nous allons changer notre algorithme un peu et de s'envelopper autour de sorte que 10-lettre d'objets dans l'encadré 1, 11 lettres dans la case 2 et ainsi de suite. Ce qui devrait couvrir n'importe quel objet.
Parfois une zone de plus d'un objet, mais si vous êtes à la recherche pour une fusée, il est toujours beaucoup plus rapide pour comparer l'arachide et une fusée, que de vérifier un tas de choux, des pois, des banjos, et les rhinocéros.
C'est un code de hachage. Un moyen d'obtenir un numéro à partir d'un objet de sorte qu'il peut être stocké dans une table de hachage. En Java, un code de hachage peut être un entier, et chaque type d'objet est responsable de la génération de sa propre. La recherche de la "hashCode" méthode de l'Objet.
Source - ici
La méthode hashCode pour une classe donnée peut être utilisé pour test pour objet l'inégalité, mais
PAS d'objet de l'égalité, pour la classe.
Le hashCode méthode est utilisée par java.util.HashSet classe de collection pour le groupe
les éléments à l'intérieur, qui a mis en seaux de hachage rapide de récupération.