 |
 |
8.2 Retour sur hashCode()
- Méthode facilitant l’utilisation de Hashtable
- Contrat de base :
- Doit retourner la même valeur lorsqu’elle est appelée
plusieurs fois sur le même objet
- Doit retourner la même valeur pour deux objets equals
- Peut retourner la même valeur pour deux objets différents
(limites du hachage)
- Algorithme de J. Bloch dans Effective Java
précédent suivant
Cette méthode est destinée à faciliter l’usage des
tables hachage. Le contrat de base de cette méthode est le suivant :
- si elle est invoquée deux fois sur le même objet, elle doit
retourner la même valeur, cela bien sûr uniquement si aucun des attributs
utilisés pour la méthode equals() n’a été
changé entre les deux appels ;
- elle doit retourner la même valeur pour deux objets égaux
selon la méthode equals ;
- il n’est pas obligatoire que deux objets différents
selon la méthode equals retournent des valeurs
de hashCode différentes ;
- nous utiliserons l’algorithme le plus populaire. Cet
algorithme a été proposé par J. Bloch dans Effective
Java (Addison-Wesley 2001). En voici la transcription :
- partir d’une valeur prédéfinie (si possible un nombre
premier), par exemple 17, stockée dans une variable de type int appelée result ;
- pour chaque attribut significatif de la classe que nous
appelons f (un attribut est significatif
s’il est pris en compte par equals()) :
- calculer une valeur entière appelée c de hashCode() selon le
type de f.
- combiner la valeur entière de result avec la valeur obtenue selon l’expression
suivante : result = 31 * result + c .
- retourner la valeur lorsque tous les attributs
significatifs ont été traités.
La génération automatique des méthodes equals et hashCode sera
réalisée pendant les séances de travaux pratiques.
Christian Bac, Denis Conan, Télécom
SudParis, CSC 4002, Octobre 2015
|
|