重寫hashCode方法

2021-07-05 01:42:54 字數 1057 閱讀 6239

如何衝寫類的hashcode方法,重寫hashcode方法,一般也要重寫equals方法。原則是:

1.equals方法必須滿足自反性(x.equals(x)必須返回true)、對稱性(x.equals(y)返回true時,y.equals(x)也必須返回true)、傳遞性(x.equals(y)和y.equals(z)都返回true時,x.equals(z)也必須返回true)和一致性(當x和y引用的物件資訊沒有被修改時,多次呼叫x.equals(y)應該得到同樣的返回值),而且對於任何非null值的引用x,x.equals(null)必須返回false。

2.如果兩個物件相同(equals方法返回true),那麼它們的hashcode值一定要相同。

實現高質量的equals方法的訣竅包括:

1. 使用==操作符檢查"引數是否為這個物件的引用「;

2. 使用instanceof操作符檢查"引數是否為正確的型別";

3. 對於類中的關鍵屬性,檢查引數傳入物件的屬性是否與之相匹配;

4. 編寫完equals方法後,問自己它是否滿足對稱性、傳遞性、一致性;

5. 重寫equals時總是要重寫hashcode;

6. 不要將equals方法引數中的object物件替換為其他的型別,在重寫時不要忘掉@override註解。

例子:以**號碼為例,這裡還利用了素數。對於**號碼,其實只要用比9大的素數就可以了,這裡用了31,也可以用11.

public class phonenumber 

@override

public boolean equals(object obj) else if (!linenumber.equals(other.linenumber))

return false;

if (prefix == null) else if (!prefix.equals(other.prefix))

return false;

return true;

}}

(1如果兩個物件相同(equals方法返回true),那麼它們的hashcode值一定要相同

重寫hashCode方法

hashcode方法在object類中定義如下 public native int hashcode 說明是乙個本地方法,其實現和本地機器相關。我們可以在自己的類中覆蓋hashcode方法。下面string類中重寫的hashcode方法 public int hashcode hash h retu...

hashcode 與equals 方法的重寫

equals 是超類object的乙個基本方法。public boolean equals object obj 當類有自己的 邏輯相等 的概念,而且超類還沒有覆蓋equals來實現期望的行為。預設情況下也就是從超類object繼承而來的equals方法與 是完全等價的,比較的都是物件的記憶體位址,...

重寫hashcode和equals方法的原則

public class element public int hashcode public boolean equals object o 在equals方法中需要向下轉型,效率很低,所以先判斷hashcode方法可以提高效率.附 其中 number 處是我們生成的你要計算在內的字段的 生成規則...