Maison > Java > javaDidacticiel > Comment implémenter une méthode hashCode() robuste pour les collections ?

Comment implémenter une méthode hashCode() robuste pour les collections ?

Susan Sarandon
Libérer: 2024-12-14 12:38:11
original
789 Les gens l'ont consulté

How to Implement a Robust hashCode() Method for Collections?

Implémentation de hashCode() pour les collections : bonnes pratiques et considérations

Déterminer l'implémentation optimale de la méthode hashCode() dans une collection est une tâche nuancée, fortement influencée par les modèles d’utilisation spécifiques. Cependant, une approche largement reconnue et efficace a été décrite par Josh Bloch dans son ouvrage fondateur, "Effective Java" (Item 8, deuxième édition).

Mise en œuvre suggérée par Josh Bloch

Selon l'approche de Bloch recommandation, les étapes suivantes doivent être suivies pour créer une méthode hashCode() efficace :

  1. Initialiser un int variable de résultat avec une valeur non nulle.
  2. Parcourez chaque champ f inclus dans la méthode equals().
  3. Calculez un code de hachage c pour chacun champ f en fonction de son type :

    • Pour booléen : (f ? 0 : 1)
    • Pour les types primitifs (byte, char, short, int) : (int)f
    • Pour long : (int)(f ^ (f >>> 32) )
    • Pour float : Float.floatToIntBits(f)
    • Pour double : Double.doubleToLongBits(f) (traité comme un long)
    • Pour les objets : utilisez le résultat hashCode() ou 0 si f == null
    • Pour les tableaux : calculez récursivement la valeur de hachage pour chacun element
  4. Combinez la valeur de hachage calculée c avec le résultat :

    result = 37 * result + c
    Copier après la connexion
  5. Renvoyer le résultat final.

Raison d'être de l'approche

Cette approche garantit une distribution appropriée des valeurs de hachage pour la plupart des utilisations cas en combinant efficacement les codes de hachage de tous les champs testés dans la méthode equals(). La multiplication par 37 dans l'étape de combinaison améliore encore la distribution.

Conclusion

Bien qu'il n'y ait pas de « meilleure » implémentation universelle, l'approche recommandée par Bloch fournit une base solide pour créer un hashCode efficace ( ) méthodes de collecte. En examinant attentivement les modèles d'utilisation et en appliquant les étapes décrites, les développeurs peuvent garantir que leurs collections fonctionnent de manière optimale en ce qui concerne les opérations basées sur le hachage telles que contain() et get().

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal