爲什麼重寫hashCode 同時equals

爲什麼重寫hashCode 同時equals

hashcode相等只能保證兩個對象在一個HASH表裏的同一條HASH鏈上,繼而通過equals方法才能確定是不是同一對象,
如果結果爲true, 則認爲是同一對象不在插入,否則認爲是不同對象繼續插入。

 

例:

public int hashCode(){

    return num%4

}

結果如下:

模爲0的 4,8,12 在A列,即他們的HashCode是一樣的,都是0

他們雖然HashCode一樣,但值不一樣。

 

0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
A B C D

 

 

hashCode()的返回值和equals()的關係如下:

  1. 如果x.equals(y)返回“true”,那麼x和y的hashCode()必須相等。
  2. 如果x.equals(y)返回“false”,那麼x和y的hashCode()有可能相等,也有可能不等。

 

在java的集合中,判斷兩個對象是否相等的規則是:

1),判斷兩個對象的hashCode是否相等
      如果不相等,認爲兩個對象也不相等,完畢
      如果相等,轉入2)
    (這一點只是爲了提高存儲效率而要求的,其實理論上沒有也可以,但如果沒有,實際使用時效率會大大降低,所)
2),判斷兩個對象用equals運算是否相等
      如果不相等,認爲兩個對象也不相等
      如果相等,認爲兩個對象相等(equals()是判斷兩個對象是否相等的關鍵)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章