hashCode:
他是用來產(chǎn)生hash值的,用在Hashtable上,也包括HashMap等實現(xiàn)。
hashCode的基本約定是:
1、hashCode方法在同一個object上不管被調(diào)用了多少次,在同一次執(zhí)行的Java程序中,hashCode方法必須返回一個持續(xù)相同的int。在object被修改時,不給equals方法提供信息。這個int值在同一個程序的兩次不同執(zhí)行過程中(同一程序執(zhí)行兩次),不需要保持恒定。
2、如果兩個object通過equals()方法判斷相等,則調(diào)用它們的hashCode方法應該產(chǎn)生相同的結(jié)果。
3、兩個通過equals()方法判定不相等的object,調(diào)用它們的hashCOde方法并不是必須返回不同的結(jié)果。但是,成序言們應該意識到對于不相等的object產(chǎn)生不同的int結(jié)果有助于提升hashtables的效率。
一般技術(shù)上,通過將object的內(nèi)部地址轉(zhuǎn)換為integer的方法來產(chǎn)生hashCode,但這不是必需的。
equals:
就是判斷是否相等的方法。
基本約定如下:
自反:就是x.equals(x)應該返回true
對稱:x.equals(y)返回true則y.equals(x)返回true
傳遞:x.euqls(y)==true,y.equals(z)==true,那么x.equals(z)也必須返回true
持續(xù)性:就是說如果x.equals(y)==true,不管它調(diào)用多少次都應該返回true
非空引用:x.equals(null)應該返回false
準則原因這里:
http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()
在實際Domain中如何實現(xiàn)他們比較好呢?從eclipseWork中的模板生成如下:







































下一步還要繼續(xù)研究,上面的的方法很類似于“Java theory and practice: Hashing it out”
http://www-128.ibm.com/developerworks/java/library/j-jtp05273.html