Maison> Java> javaDidacticiel> le corps du texte

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

PHPz
Libérer: 2024-04-11 18:45:01
original
901 Les gens l'ont consulté

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 dun 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
Copier après la connexion

où :

  • hest 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)
  • xest 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
Copier après la connexion

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)
Copier après la connexion

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

Cas pratique

Considérons la classePersonsuivante :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; } }
Copier après la connexion

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

Person p1 = new Person("John", 25); Person p2 = new Person("John", 25); System.out.println(p1.hashCode() == p2.hashCode()); // 输出:true
Copier après la connexion

在上面的案例中,尽管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 Nomet age. rrreeeDans le cas ci-dessus, bien que p1et p2soient 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!

Étiquettes associées:
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 téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!