제이온

equals() vs hashCode()

Création: 2024-04-25

Création: 2024-04-25 22:29

equals()

equals() compare le contenu d'un objet. On l'appelle souvent comparaison d'égalité, et si equals() n'est pas redéfini, il est équivalent à == en interne, ce qui correspond à une comparaison d'identité. Par conséquent, si vous souhaitez comparer correctement l'égalité d'objets, vous devez absolument utiliser equals().



hashCode()

hashCode() vérifie si deux objets sont le même objet. Il a la même fonction de comparaison d'identité que ==, mais la méthode hashCode() renvoie une valeur entière unique de l'objet pendant l'exécution. En général, elle renvoie l'adresse mémoire de l'objet stocké dans le tas.



Cette méthode est annotée avec le mot-clé native, ce qui signifie qu'elle est utilisée lorsque vous utilisez un langage développé dans un langage autre que Java dans Java.


Qu'est-ce que le hachage ?

Le hachage est le processus de génération d'une valeur de sortie de taille fixe à partir d'une valeur d'entrée de taille variable à l'aide d'une fonction de hachage. La valeur obtenue par hachage est appelée code de hachage.


equals() et hashCode()

Comme les objets identiques doivent avoir la même adresse mémoire, il est évident que les objets identiques doivent avoir le même code de hachage. Par conséquent, il est préférable d'écrire du code qui garantit le même code de hachage en redéfinissant non seulement equals() mais aussi hashCode().


Structure de données de hachage


Essayons d'insérer deux objets équivalents dans la structure de données HashSet comme indiqué ci-dessus. Si vous affichez la taille de cet ensemble, vous obtiendrez 2. Pourquoi ?


C'est parce que les structures de données qui utilisent le hachage utilisent hashCode() pour déterminer la clé. En d'autres termes, avant de comparer si les objets sont identiques, ils comparent d'abord si les codes de hachage des deux objets sont identiques, puis déterminent si les deux objets sont équivalents. Dans ce cas, si hashCode() n'est pas redéfini, hashCode() de Object est utilisé, donc l'adresse mémoire où chaque objet est stocké est renvoyée. Par conséquent, il est conseillé de redéfinir hashCode() ainsi que equals() pour les cas où des structures de données de hachage sont utilisées.



Source


Questions d'entretien prévues et réponses

Pourquoi equals() et hashCode() sont-ils utilisés ensemble ?

Les structures de données qui utilisent le hachage utilisent hashCode() pour déterminer la clé. En d'autres termes, avant de comparer si les objets sont identiques, ils comparent d'abord si les codes de hachage des deux objets sont identiques, puis déterminent si les deux objets sont équivalents. Dans ce cas, si hashCode() n'est pas redéfini, hashCode() de Object est utilisé, donc l'adresse mémoire où chaque objet est stocké est renvoyée. Par conséquent, il est conseillé de redéfinir hashCode() ainsi que equals() pour les cas où des structures de données de hachage sont utilisées.

Commentaires0

[Hors informatique, survivre en tant que développeur] 14. Résumé des questions techniques fréquemment posées lors d'un entretien d'embauche pour développeur débutantNous avons résumé et organisé les questions techniques fréquemment posées lors des entretiens d'embauche pour les développeurs débutants (zones de mémoire, structures de données, bases de données, etc.). Nous espérons que cela vous aidera dans votre prépa
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

April 3, 2024