夯實JAVA基礎之 -- equals和hashCode

hashCode 契約:

  • 在一個運行的進程中,相等的對象必須要有相同的哈希碼
  • 請注意這并不意味著以下常見的誤解:
  • 不相等的對象一定有著不同的哈希碼——錯!
  • 有同一個哈希值的對象一定相等——錯!

注意點:

  • 哈希碼的數量: 2^32 40多億
  • 手動實現equals方法的時候,一定要同時實現 hashCode 方法

為什么?
因為一個對象的 hashCode 方法需要與 equals 方法考慮同樣的域。 通過重寫 equals 方法,將申明一些對象與其他對象相等,但是 Object 中的 hashCode 方法將所有的對象看做是不同的。所以你將會有不同哈希碼的相同對象。例如,在 HashMap 中調用contains 方法會返回 false,即使這個對象已經被添加。

  • 永遠不要把哈希碼用作一個 key

生日悖論 現象能解釋這個事情。哈希碰撞會有很大的幾率發生。

  • 在分布式應用中不要使用哈希碼

例如:不應該使用哈希碼來持久化狀態,因為下次運行時候,"相同"對象的哈希碼可能不同。

參考資料:

關于 hashCode() 你需要了解的 3 件事

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 本文出自 Eddy Wiki ,轉載請注明出處:http://eddy.wiki/interview-java.h...
    eddy_wiki閱讀 1,184評論 0 16
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,767評論 18 399
  • 個人博客: 斯科特安的時間 今天看資料時看到coolshell的這篇文章,獲益匪淺,收藏到文庫里。 譯文原文:ht...
    斯科特安閱讀 5,246評論 4 23
  • Java集合框架 Java平臺提供了一個全新的集合框架。“集合框架”主要由一組用來操作對象的接口組成。不同接口描述...
    小石38閱讀 372評論 0 0
  • 殘冬的夜,是低至零度的冰涼!薄情西風肆虐的在耳鬢嘶鳴,我蜷縮在沙發一隅,看爐火將屋子逼的通亮!將你送來的咖啡清然入...
    花無眠閱讀 297評論 1 2