Pourquoi hashCode() renvoient la même valeur pour les différents objets en Java?

Une citation du livre que je suis en train de lire La Tête La Première, Java:

Le point est que hashcodes peut être le même sans nécessairement garantir que les objets sont égaux, parce que l'algorithme de hachage utilisé dans le hashCode() méthode qui pourrait arriver à retourner la même valeur pour plusieurs objets.

Pourquoi le hashCode() méthode de retourner la même valeur pour les différents objets? N'est-ce pas causer des problèmes?

Parce que par exemple le point de HashSet en avoir un seul des codes de hachage par élément. Et cela semble inutile si la paire d'objets peuvent avoir le même code de hachage.
Non, le point d'une valeur de hachage est de mapper chaque objet à un entier. Ensuite, vous pouvez les stocker dans un tableau en vertu de cette valeur (en fait, vous appliquez d'abord un int->int fonction de hachage à la carte à la plage du tableau). Si les deux hashCode() et la fonction de hachage sont rapides, vous bénéficiez d'un accès rapide à l'objet lorsque vous souhaitez récupérer à partir du tableau -- mais, sauf si vous savez tous les objets à l'avance, il peut toujours arriver que les deux objets de la carte de la même valeur. Que l'on appelle une collision, et à cause de collisions, vous ne comptez pas sur la fonction de hachage, mais également utiliser des "égaux" méthode de comparaison.
Merci, c'était très clair.
Content d'avoir pu aider. J'ai tapé une explication élaborée ci-dessous, pour l'enregistrement.

OriginalL'auteur Eugene | 2010-12-05