Maison  >  Article  >  Java  >  Comment est généré le code de hachage d’un objet en Java ?

Comment est généré le code de hachage d’un objet en Java ?

PHPz
PHPzoriginal
2024-04-11 18:45:01915parcourir

Le code de hachage d'un objet Java est généré par la formule suivante : h = (h

Comment est généré le code de hachage d’un objet en Java ?

Comment le code de hachage d'un objet est-il généré en Java ?

Le code de hachage est une valeur int stockée dans un objet Java et est utilisé pour identifier et trouver rapidement l'objet. Il est généré par la formule suivante :

hashCode = (h << 5) - h + x

où :

  • h est le résultat du code de hachage précédent décalé de 5 bits et sommé avec le code de hachage d'origine (la valeur initiale est 0)
  • x est l'objet Le code de hachage de la valeur ou du pointeur de la propriété

Pour les types primitifs, le code de hachage est stocké directement dans l'objet, tel que :

int i = 10;
System.out.println(i.hashCode()); // 输出:10

Pour les types de référence, le code de hachage est généré en fonction du code de hachage liste de son objet, où :

hashCode = (hashcode1 * 31) + (hashcode2 * 31) + ... + (hashcodeN * 31)

31 est un nombre premier, appelé « nombre magique », qui permet de réduire les collisions de hachage.

Cas pratique

Considérons la classe Person suivante : Person 类:

class Person {
    private String name;
    private int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    @Override
    public int hashCode() {
        int hash = 0;
        if (name != null) {
            hash += name.hashCode() * 31;
        }
        hash += age * 31;
        return hash;
    }
}

此类覆盖了 hashCode() 方法以生成定制的哈希码,根据 nameage 属性哈希码计算。

Person p1 = new Person("John", 25);
Person p2 = new Person("John", 25);

System.out.println(p1.hashCode() == p2.hashCode()); // 输出:true

在上面的案例中,尽管 p1p2rrreee

Cette classe remplace la méthode hashCode() pour générer un code de hachage personnalisé, selon Calcul du code de hachage des attributs Nom et age. 🎜rrreee🎜Dans le cas ci-dessus, bien que p1 et p2 soient des objets différents, les codes de hachage sont les mêmes puisqu'ils ont les mêmes propriétés. 🎜

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