hashCode()
この関数はハッシュ コード (ハッシュ コードとも呼ばれます) を取得するもので、実際には整数を返します。このハッシュ コードの目的は、ハッシュ テーブル内のオブジェクトのインデックス位置を決定することです。
hashCode()
は JDK の Object.java で定義されています。つまり、Java のクラスには hashCode()
関数が含まれています。
ハッシュテーブルはキーと値のペアを格納しており、「キー」に応じて対応する「値」を素早く取り出すことができるのが特徴です。これはハッシュコードを使用します。 (必要なオブジェクトをすぐに見つけることができます)。
プログラムを作成する過程で、2 つのオブジェクトが同じかどうかを判断することは非常に一般的で、よく直面する問題です。 hashCode()
メソッドは、2 つのオブジェクトの比較速度を向上させるために使用されます。
「HashSet の重複をチェックする方法」を例として、hashCode が必要な理由を説明します。
オブジェクトを HashSet## に追加するとき#、HashSet は最初にオブジェクトの
hashcode 値を計算して、オブジェクトが追加される場所を決定します。また、追加された他のオブジェクトの
hashcode 値と比較します。一致する
ハッシュコード がない場合、
HashSet はオブジェクトが繰り返し出現しないものとみなします。
hashcode 値を持つオブジェクトが見つかった場合、equals() メソッドが呼び出され、
hashcode が等しいかどうかを確認します。オブジェクトは true です。同じです。 2 つが同じ場合、
HashSet では結合操作は成功しません。異なる場合は、別の場所に再ハッシュされます。
equals の数を大幅に減らし、それに応じて実行速度を大幅に向上させます。
等しい場合、それらの hashCode
値は等しくなければならないと上で説明しました。 hashCode
メソッドをオーバーライドせずに equals
メソッドのみをオーバーライドする場合、hashCode
の値は異なり、equals
メソッドは判定結果は true
です。
メソッドを書き換えずに、equals
メソッドのみを書き換えると、オブジェクト内のhashCode
は、オブジェクトのストレージアドレス変換に基づいて形成されます。オブジェクト、ハッシュ値。このとき、hashCode
メソッドがオーバーライドされていないため、同じオブジェクトが別の場所にハッシュされ、オブジェクトが上書きできないという問題が発生する可能性があります。
犬のクラス
package com.xiao; /** * @author :小肖 * @date :Created in 2022/3/11 14:42 */ public class Dog { private String name; private Integer age; public Dog() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Dog(String name, Integer age) { this.name = name; this.age = age; } @Override public boolean equals(Object obj) { if(obj.getClass() != getClass()){ return false; } Dog dog = (Dog) obj; if(dog.getAge() == age && dog.getName().equals(name)){ return true; } return false; } }
テストクラス
import com.xiao.Dog; public class Test { public static void main(String[] args) { Dog dog = new Dog("小旺",2); Dog dog1 = new Dog("小旺",2); System.out.println("equals结果:" + dog.equals(dog1)); System.out.println("dog 的 hashCode 值是否等于 dog1 的 hashCode 值:" +(dog.hashCode() == dog1.hashCode())); } }
テスト結果
等しい結果: truedog のハッシュコード値は、dog1 のハッシュコード値と等しいか: false
以上がJavaでのhashCodeメソッドの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。