1. 程式人生 > 其它 >hashCode 和 Equals

hashCode 和 Equals

hashCode 和 Equals

hashCode介紹

hashCode()的作用是獲取雜湊碼,也稱為雜湊碼;它實際上是返回一個int整數。這個雜湊碼的作用是確定該物件在雜湊表中的索引位置。hashCode()定義在JDK的

Object.,java中,Java中的任何類都包含有hashCode()函式。散列表儲存的是鍵值對(key-value),它的特點是:能根據"鍵"快速的檢索出對應的“值"。這其中就利用

到了雜湊碼!(可以快速找到所需要的物件)

為什麼要有hashCode

以"HashSet如何檢查重複"為例子來說明為什麼要有hashcode :

物件加入HashSet時,HashSet會先計算物件的hashcode值來判斷物件加入的位置,看該位置是否有值,如果沒有、HashSet會假設物件沒有重複出現。但是如果發現有值,

這時會呼叫equals ()方法來檢查兩個物件是否真的相同。如果兩者相同,HashSet就不會讓其加入操作成功。如果不同的話,就會重新雜湊到其他位置。

這樣就大大減少了equals的次數,相應就大大提高了執行速度。

  • 如果兩個物件相等,則hashcode—定也是相同的

  • 兩個物件相等,對兩個物件分別呼叫equals方法都返回true

  • 兩個物件有相同的hashcode值,它們也不一定是相等的

  • 因此,equals方法被覆蓋過,則hashCode方法也必須被覆蓋

  • hashCode()的預設行為是對堆上的物件產生獨特值。如果沒有重寫hashCode(),則該class的兩個物件無論如何都不會相等(即使這兩個物件指向相同的資料)