協定
一致性
在 Java 應用程式執行期間,在對同一對象多次調用 hashCode 方法時,必須一致地返回相同的整數,前提是將對象進行hashcode比較時所用的信息沒有被修改。
equals
如果根據 equals(Object) 方法,兩個對象是相等的,那么對這兩個對象中的每個對象調用 hashCode 方法都必須生成相同的整數結果,註:這裡說的equals(Object) 方法是指Object類中未被子類重寫過的equals方法。
即使兩個hashCode()返回的結果相等,兩個對象的equals方法也不一定相等。
附加
如果根據equals(java.lang.Object)方法,兩個對象不相等,那么對這兩個對象中的任一對象上調用 hashCode 方法不一定生成不同的整數結果。但是,程式設計師應該意識到,為不相等的對象生成不同整數結果可以提高哈希表的性能。
重寫
HashMap對象是根據其Key的hashCode來獲取對應的Value。
在重寫父類的equals方法時,也重寫hashcode方法,使相等的兩個對象獲取的HashCode也相等,這樣當此對象做Map類中的Key時,兩個equals為true的對象其獲取的value都是同一個,比較符合實際。
詳細的圖文例子請參考這裡