Posted on 2010-03-03 16:03
oathleo 閱讀(1681)
評論(4) 編輯 收藏 所屬分類:
Java
如果兩個對象equal,那么它們的hashCode值一定要相同;2、如果兩個對象的hashCode相同,它們并不一定equal
當Set要添加新的元素時,先調用這個元素的hashCode方法,就一下子能定位到它應該放置的物理位置上。如果這個位置上沒有元素,它就可以直接存儲在
這個位置上,不用再進行任何比較了;如果這個位置上已經有元素了,就調用它的equals方法與新元素進行比較,相同的話就不存了,不相同就散列其它的地址。
所以兩個不equal的對象,有相同的hash,是可以存進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());
}
}