Maison >Java >JavaBase >Quelle est la différence entre hashcode et égal ?

Quelle est la différence entre hashcode et égal ?

hzc
hzcoriginal
2020-07-03 11:59:456065parcourir

La différence entre hashcode et égal est : 1. Si deux objets égal renvoie vrai, alors hashCode doit également renvoyer le même nombre int ; 2. Si deux objets hashCode renvoie le même numéro int, alors égal n'est pas nécessairement le cas. Renvoie vrai.

Quelle est la différence entre hashcode et égal ?

hashcode : une représentation entière de l'adresse initiale de l'objet

Les objets en Java sont gérés par la JVM, et la JVM fera l'affaire ainsi, lorsqu'il le juge approprié, le déplacement d'objets, par exemple le GC, se produit sous certains algorithmes GC qui nécessitent une défragmentation de la mémoire. A ce moment, l'adresse de l'objet changera, mais le hashcode ne changera pas. ​

hashCode vise à améliorer l'efficacité de la recherche dans le stockage de la structure de hachage et n'a aucun effet dans les tableaux linéaires.

  1. Généralement, si un objet d'une classe sera stocké dans une structure de stockage de hachage telle que HashTable, HashSet, HashMap, etc., alors il est préférable de réécrire hashCode après avoir réécrit égal, sinon, les données seront stockées. Non-unicité (deux données égales sont stockées). S'il est déterminé qu'il ne sera pas stocké dans ces structures de hachage, vous n'avez pas besoin de réécrire le hashCode.

  2. Si égal renvoie vrai pour deux objets, hashCode doit également renvoyer le même nombre int.

  3. Si égal renvoie faux pour deux objets, hashCode ne renvoie pas nécessairement des nombres int différents, mais générer différentes valeurs hashCode pour des objets inégaux peut améliorer les performances de la table de hachage.

  4. Si le hashCode de deux objets renvoie le même nombre int, égal à ne renvoie pas nécessairement vrai.

  5. Si le hashCode de deux objets renvoie des nombres int différents, les égaux doivent renvoyer false.

  6. Si le même objet est déjà stocké dans la collection lors de l'exécution, les informations pertinentes qui affectent la valeur hashCode ne peuvent pas être modifiées, sinon cela provoquera des fuites de mémoire.

  7. De manière générale, lorsque vous comparez des tailles entre des objets, vous devez remplacer la méthode égale.

Tutoriel recommandé : "Tutoriel Java"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn