hashCode 契約:
- 在一個運行的進程中赋兵,相等的對象必須要有相同的哈希碼
- 請注意這并不意味著以下常見的誤解:
- 不相等的對象一定有著不同的哈希碼——錯楞遏!
- 有同一個哈希值的對象一定相等——錯!
注意點:
- 哈希碼的數(shù)量: 2^32 40多億
- 手動實現(xiàn)equals方法的時候资锰,一定要同時實現(xiàn) hashCode 方法
為什么敢课?
因為一個對象的 hashCode 方法需要與 equals 方法考慮同樣的域。 通過重寫 equals 方法绷杜,將申明一些對象與其他對象相等直秆,但是 Object 中的 hashCode 方法將所有的對象看做是不同的。所以你將會有不同哈希碼的相同對象鞭盟。例如,在 HashMap 中調用contains 方法會返回 false圾结,即使這個對象已經(jīng)被添加。
- 永遠不要把哈希碼用作一個 key
生日悖論 現(xiàn)象能解釋這個事情齿诉。哈希碰撞會有很大的幾率發(fā)生筝野。
- 在分布式應用中不要使用哈希碼
例如:不應該使用哈希碼來持久化狀態(tài)晌姚,因為下次運行時候,"相同"對象的哈希碼可能不同歇竟。