Posted on 2010-03-03 16:03
oathleo 阅读(1675)
评论(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());
}
}