composite key 與hashcode,equals
1、hashCode的存在主要是用於查找的快捷性,如Hashtable,HashMap等,hashCode是用來在散列存儲結構中確定對象的存儲地址的;在 Java 應用程序執行期間,在對同一對 象多次調用 hashCode 方法時,必須一致地返回相同的整數,前提是將對象進行 equals 比較時所用的信息沒有被修改。
2、如果兩個對象相同,就是適用於equals(java.lang.Object) 方法,那麽這兩個對象的hashCode一定要相同;equals(Object) 方法是指Object類中未被子類重寫過的equals方法
如果兩個hashCode()返回的結果相等,則兩個對象的equals方法不一定相等。
如果根據equals(java.lang.Object)方法,兩個對象不相等,那麽對這兩個對象中的任一對象上調用 hashCode 方法不一定生成不同的整數結果。但是,程序員應該意識到,為不相等的對象生成不同整數結果可以提高哈希表的性能。
3、如果對象的equals方法被重寫,那麽對象的hashCode也盡量重寫,並且產生hashCode使用的對象,一定要和equals方法中使用的一致,否則就會違反上面提到的第2點;
4、兩個對象的hashCode相同,並不一定表示兩個對象就相同,也就是不一定適用於equals(java.lang.Object) 方法,只能夠說明這兩個對象在散列存儲結構中,如Hashtable,他們“存放在同一個籃子裏”。
參考:https://www.sogou.com/link?url=DOb0bgH2eKh1ibpaMGjuy1Vv78Wo0PVv4fZWZOQHECGueKW9M67CaVLpMY1k7wxTVhRrW5zu__s.
composite key 與hashcode,equals