ホームページ  >  記事  >  Java  >  Java ではオブジェクトのハッシュ コードはどのように生成されるのでしょうか?

Java ではオブジェクトのハッシュ コードはどのように生成されるのでしょうか?

PHPz
PHPzオリジナル
2024-04-11 18:45:01972ブラウズ

Java オブジェクトのハッシュ コードは次の式で生成されます: h = (h

Java ではオブジェクトのハッシュ コードはどのように生成されるのでしょうか?

#Java ではオブジェクトのハッシュ コードはどのように生成されるのでしょうか?

ハッシュ コードは Java オブジェクト内に格納される int 値で、オブジェクトをすばやく識別して検索するために使用されます。これは次の式で生成されます:

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

ここで:

  • h は、5 ビット左シフトされた前のハッシュ コードと元のハッシュの合計です。 code 結果(初期値は0)
  • #xxxはオブジェクトの属性値またはポインタのハッシュコードです
基本型の場合はハッシュコードが格納されます

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

参照型の場合、ハッシュ コードはそのオブジェクトのハッシュ コード リストに基づいて生成されます。

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

ここで、31 は素数です。これは「マジックナンバー」と呼ばれ、ハッシュの衝突を減らすのに役立ちます。

実践的なケース

次の

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()## をカバーします#name および age 属性ハッシュ コードに基づいて計算されたカスタム ハッシュ コードを生成するメソッド。 <pre class='brush:java;toolbar:false;'>Person p1 = new Person(&quot;John&quot;, 25); Person p2 = new Person(&quot;John&quot;, 25); System.out.println(p1.hashCode() == p2.hashCode()); // 输出:true</pre>上記の場合、

p1

p2 は異なるオブジェクトですが、同じプロパティを持つため、ハッシュ コードは同じです。

以上がJava ではオブジェクトのハッシュ コードはどのように生成されるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。