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