HashCode和equal方法的區別和聯絡

2022-07-30 20:27:14 字數 1065 閱讀 8270

hashcode 和 equal方法過載

1、 為什麼要過載equal方法?

答案:因為object的equal方法預設是兩個物件的引用的比較,意思就是指向同一記憶體,位址則相等,否則不相等;如果你現在需要利用物件裡面的值來判斷是否相等,則過載equal方法。

2、 為什麼過載hashcode方法?

答案:一般的地方不需要過載hashcode,只有當類需要放在hashtable、hashmap、hashset等等hash結構的集合時才會過載hashcode,那麼為什麼要過載hashcode呢?

就hashmap來說,好比hashmap就是乙個大記憶體塊,裡面有很多小記憶體塊,小記憶體塊裡面是一系列的物件,可以利用hashcode來查詢小記憶體塊hashcode%size(小記憶體塊數量),所以當

equal相等時,hashcode必須相等,而且如果是object物件,必須過載hashcode和equal方法。

3、 為什麼equals()相等,hashcode就一定要相等,而hashcode相等,卻不要求equals相等?

答案:1、因為是按照hashcode來訪問小記憶體塊,所以hashcode必須相等。

2、hashmap獲取乙個物件是比較key的hashcode相等和equal為true。

之所以hashcode相等,卻可以equal不等,就比如objecta和objectb他們都有屬性name,那麼hashcode都以name計算,所以hashcode一樣,但是兩個物件屬於不同型別,所以equal為false。

4、 為什麼需要hashcode?

1、 通過hashcode可以很快的查到小記憶體塊。

2、 通過hashcode比較比equal方法快,當get時先比較hashcode,如果hashcode不同,直接返回false。  

以下是乙個具體類的例項**:

public class person

@override

public boolean equals(object obj)

else if (!name.equals(other.name))

return false;

return true;}}

JAVA基礎 equal和hashcode的區別

面試時被問到了equal和hashcode的區別,在這裡總結一下 equals 是根類obeject 中的方法。源 如下 public boolean equals object obj 可見預設的 equals 方法,直接呼叫 比較物件位址。不同的子類,可以重寫此方法,進行兩個物件的 equals...

帶我重新認識HashCode和equals

介紹一下equals equals 比較兩個物件是不是相同,問題來了,equals比較的是位址,引用,這也是最準確的方法。介紹一下hashcode hashcode 返回的是當前物件的實體地址轉換成的乙個int型別資料,看清楚這裡是轉換,不是等於。所以不能唯一確定物件是不是同乙個物件。他們之間的關係...

重寫hashCode 方法和equals 方法

1 object類中有hashcode 和equals方法 public native int hashcode 根據位址進行運算得到的偽隨機數 public boolean equals object obj a.equals b ab物件內容相同,可能是同乙個位址,這種情況hashcode一定相...