Maison >Java >javaDidacticiel >Comment implémenter efficacement hashCode() pour les collections ?

Comment implémenter efficacement hashCode() pour les collections ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-18 07:13:15201parcourir

How to Effectively Implement hashCode() for Collections?

Implémentation de hashCode() pour les collections

L'implémentation optimale de hashCode() pour une collection dépend de son modèle d'utilisation. Cependant, une approche largement acceptée proposée par Josh Bloch dans son livre "Effective Java" est la suivante :

Algorithme :

  1. Attribuer un valeur en résultat d'une variable entière.
  2. Pour chaque champ f utilisé dans Equals() méthode :

    • Pour les champs booléens, calculez (f ? 0 : 1).
    • Pour les champs numériques (byte, char, short, int), calculez (int)f.
    • Pour les champs longs, calculez (int)(f ^ (f >>> 32)).
    • Pour float champs, calculez Float.floatToIntBits(f).
    • Pour les champs doubles, calculez Double.doubleToLongBits(f) et traitez le résultat comme une valeur longue.
    • Pour les champs d'objet, utilisez le hashCode( ) méthode de l'objet ou 0 si f est nul.
    • Pour les champs de tableau, calculez récursivement les valeurs de hachage de chaque élément et combinez eux.
  3. Combinez chaque valeur de hachage c avec le résultat : résultat = 37 * résultat c.
  4. Renvoyer le résultat.

Avantages :

  • Fournit une distribution raisonnable des valeurs de hachage pour la plupart des utilisations cas.
  • L'approche méthodique garantit un comportement cohérent entre différents types de données.
  • Sensible aux changements qui affectent l'égalité des objets.

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!

Déclaration:
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