Posted on 2010-03-03 16:03
oathleo 閱讀(1681)
評(píng)論(4) 編輯 收藏 所屬分類:
Java
如果兩個(gè)對(duì)象equal,那么它們的hashCode值一定要相同;2、如果兩個(gè)對(duì)象的hashCode相同,它們并不一定equal
當(dāng)Set要添加新的元素時(shí),先調(diào)用這個(gè)元素的hashCode方法,就一下子能定位到它應(yīng)該放置的物理位置上。如果這個(gè)位置上沒有元素,它就可以直接存儲(chǔ)在
這個(gè)位置上,不用再進(jìn)行任何比較了;如果這個(gè)位置上已經(jīng)有元素了,就調(diào)用它的equals方法與新元素進(jìn)行比較,相同的話就不存了,不相同就散列其它的地址。
所以兩個(gè)不equal的對(duì)象,有相同的hash,是可以存進(jìn)Set的。
class HashNode {
int id;
public HashNode(int id){
this.id = id;
}
public int hashCode() {
return id;
}
public boolean equals(Object obj) {
return false;
}
}
public class HashTest {
public static void main(String[] args) {
HashNode n1 = new HashNode(1);
HashNode n2 = new HashNode(1);
HashMap map = new HashMap();
map.put(n1, "111");
map.put(n2, "222");
System.out.println(n1.equals(n2));
System.out.println(n1.hashCode() == n2.hashCode());
System.out.println(map.keySet().size());
}
}