1. 程式人生 > >重寫 equals 方法時必須重寫 hashcode 方法

重寫 equals 方法時必須重寫 hashcode 方法

允許 都在 兩個 結果 not 沒有 必須 關系 object

equals 與 hashCode 這兩個方法都在 Object 類中定義,根據方法註釋可知:

  1. equal 的兩個對象必須具有相同的 hashcode
  2. 但卻沒有要求 not equal 的兩個對象的 hashcode 必須不同
  3. 然而,程序員應該知道,對於不相等的對象產生不同的 hash 可以提高哈希表的性能

怎麽理解呢?

這兩個方法的關系和集合類的設計有關,我們以 HashSet 為例,HashSet 中不允許存在重復對象,對象重復的條件是 hash 相等且 equals。為什麽這麽設計?因為如果只判斷 equals 會降低效率(對象的 equals 方法可能會非常復雜),而判斷 hash 相等是很快的,若 hash 不相等直接跳過,不用再進行 equals 判斷了。

第一句話:如果不遵守,可能導致 HashSet 中出現“重復對象”(舉例:HashSet 存放學生學籍,而學生 equals 的標準是學號相等,hashcode 不同會導致 HashSet 存儲了相同的學生)

第二句話:對於 not equal 的兩個對象,即使 hashcode 相同也不會使程序結果出錯,但如果 hashcode 不同卻能夠提升哈希表的性能。

重寫 equals 方法時必須重寫 hashcode 方法