Le hachage (hashing) consiste à transformer un élément en un entier (int).

Cette transformation est faite par une fonction de hachage (hashing function), et résulte en valeur de hachage (hash value)

Vu qu’il n’y a pas forcément assez de nombres entiers pour représenter tous les objets, il est possible que deux objets qui ne sont pas égaux aient la même valeur de hachage.

On a donc x.equals(y) => x.hashCode() == y.hashCode(), mais x.hashCode() == y.hashCode =/> x.equals(y)

Règle de compatibilité hashCode / equals

Si on redéfini hashCode, il faudrait aussi redéfinir equals, et vice versa.

Dans la classe Objects, il y a une fonction statique hash qui retourne une valeur de hachage pour une combination d’objets.

HashSet

La classe HashSet utilise la méthode hashCode pour déterminer si deux objets peuvent être dans le même ensemble. hashCode doit donc être redéfini pour l’objet qu’on désire stocker dans le HashSet

Cependant deux objets ayant le même hashCode peuvent figurer dans le même ensemble HashSet (voir implication et règle de compatibilité)