Accueil
 Sommaire du cours
 1  Introduction à Java
 2  Concepts de bases de Java
 3  Classes et objets en Java
 4  Généralisation spécialisation en Java
 5  Organisation des sources Java
 6  API Java
 7  Exceptions en Java
 8  Concepts objets avancés en Java
 8.1  Copie simple/légère
 8.2  Retour sur \texttt hashCode()
 8.2.1  Exemple hashCode
 8.3  Retour sur les exceptions
 Bibliographie

 Contacts

W3C validator

Département INF  
 Conception et programmation orientées objet


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