Quel est l'usage du hashCode en Java?

en Java, obj.hashCode() renvoie une certaine valeur. À quoi sert ce code de hachage dans la programmation?

120
demandé sur jkdev 2010-08-25 11:49:23

7 réponses

hashCode() est utilisé pour écopage dans Hash implémentations comme HashMap , HashTable , HashSet , etc.

la valeur reçue de hashCode() est utilisée comme numéro de seau pour stocker des éléments de l'ensemble/carte. Ce numéro de seau est adresse de l'élément à l'intérieur du set/map.

quand vous faites contains() il prendra le hash code de l'élément, puis chercher le seau où le code de hachage de points. Si plus d'un élément est trouvé dans le même seau (plusieurs objets peuvent avoir le même code de hachage), alors il utilise la méthode equals() pour évaluer si les objets sont égaux, et ensuite décider si contains() est vrai ou faux, ou décider si l'élément pourrait être ajouté dans l'ensemble ou non.

170
répondu aishu 2015-05-07 11:43:02

De la Javadoc :

renvoie une valeur de code de hachage pour l'objet. Cette méthode est supportée pour le bénéfice de hashtables tels que ceux fournis par java.util.Hashtable .

le contrat général de hashCode est:

  • chaque fois qu'elle est invoquée sur le même objet plus d'une fois lors de l'exécution D'une application Java, la méthode hashCode doit être appliquée de manière cohérente retourner le même entier , pourvu qu'aucune information utilisée dans les comparaisons égales sur l'objet ne soit modifiée. Cet entier n'a pas besoin de rester cohérent d'une exécution d'une application à une autre exécution de la même application.

  • si deux objets sont égaux selon la méthode equals(Object) , alors appeler la méthode hashCode sur chacun des deux objets doit produire le même résultat entier.

  • Il est pas nécessaire que si deux objets sont inégales selon les equals(java.lang.Object) méthode, puis en appelant la hashCode méthode sur chacun des deux objets doivent produire integer distinctes résultats. Cependant, le programmeur doit être conscient que la production de résultats entiers distincts pour les objets inégaux peut améliorer la performance des hashtables.

autant Qu'il est raisonnablement pratique, la méthode hashCode définie par l'objet class renvoie des entiers distincts pour des objets distincts. (Ceci est typiquement implémenté par convertissant l'adresse interne de l'objet en un entier , mais cette technique d'implémentation n'est pas requise par le langage de programmation Java.)

27
répondu John Topley 2015-05-07 11:55:19

la valeur retournée par hashCode() est le code de hachage de l'objet, qui est l'adresse mémoire de l'objet en hexadécimal.

par définition, si deux objets sont égaux, leur code de hachage doit aussi être égal. Si vous outrepassez la méthode equals() , vous changez la façon dont deux objets sont mis en équivalence et L'implémentation de hashCode() n'est plus valide. Par conséquent, si vous outrepassez la méthode equals (), vous devez aussi outrepasser la hashCode() méthode ainsi.

Cette réponse est du java SE 8 tutoriel officiel de la documentation

8
répondu eliscolatour 2017-11-13 13:59:45

bien que hashcode ne fasse rien avec votre logique d'entreprise, nous devons nous en occuper dans la plupart des cas. Parce que lorsque votre objet est placé dans un conteneur à base de hash(HashSet, HashMap...), le conteneur met/obtient le hashcode de l'élément.

7
répondu 卢声远 Shengyuan Lu 2017-03-16 10:36:17

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. ce besoin de stocker des objets utilisera un modulo hashCode de la taille de leur tableau interne pour choisir dans quelle" position mémoire " (i.e. position tableau) pour stocker l'objet.

il y a des cas où des collisions peut se produire (deux objets finissent avec le même hashcode), et cela, bien sûr, doit être résolu avec soin.

7
répondu roottraveller 2018-06-29 08:02:28

Hashcode est un code unique généré par la JVM pour chaque création d'objet..nous utilisons hashcode pour effectuer certaines opérations sur des algorithmes liés au hachage comme hashtable, hashmap, etc..les avantages du hashcode est il rend la recherche opération facile bcoz lorsque nous cherchons un objet que le code unique aide à découvrir que obj. Mais on ne peut pas dire que le hashcode est l'adresse d'un obj. C'est un code unique généré par JVM pour chaque objet..c'est y maintenant le jour hashing algorithme z le plus populaire algorithme de recherche

1
répondu pritish sahu 2017-10-22 10:49:38

la méthode du hashCode pour une classe donnée peut être utilisée pour le test pour l'inégalité des objets, mais Pas l'égalité d'objet, pour cette classe.

la méthode hashCode est utilisée par java.util.HashSet collection classe pour grouper les des éléments de cet ensemble dans des seaux de hachage pour une récupération rapide.

-8
répondu Pranav Madhani 2016-12-30 06:08:34