class A{
@Override
public int hashCode() {
return 10;
}
}
public class SampleClass {
public static void main(String[] args){
Map map = new HashMap();
map.put(new A(), "A");
map.put(new A(), "B");
System.out.println(map.size());
System.out.println(new A().hashCode());
System.out.println(new A().hashCode());
}
}输出:-
2
10
10为什么是2?如果我们实现的是hashCode方法,它将返回相同的整数。是不是应该是1?
发布于 2012-07-07 19:28:07
你没有凌驾于equals(Object)之上,所以它们不平等。
仅仅因为两个对象具有相同的哈希代码并不意味着HashMap假设它们是相同的-实际上,如果是这样的话,这将是非常非常糟糕的。
如果希望两个A对象被HashMap视为相等,则必须在A中重写equals(Object)以将一个A定义为等于另一个A。
发布于 2012-07-07 19:32:48
来自http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html#hashCode()
hashCode的总合同是:
因此,当要知道两个物体是否相等时,就像路易斯指出的那样,平等是前进的道路。哈希代码只告诉您如何在基于哈希的集合实现中存储对象。
https://stackoverflow.com/questions/11378014
复制相似问题