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());
}
}
Run Code Online (Sandbox Code Playgroud)
输出: -
2
10
10
Run Code Online (Sandbox Code Playgroud)
为什么2 ??? 如果我们正在实现返回相同整数的hashCode方法.不应该大小为1 ???
你没有覆盖equals(Object),所以他们不比较相等.
仅仅因为两个对象具有相同的哈希码并不意味着HashMap假设它们是相同的 - 事实上,如果是这样的话,那将是非常非常糟糕的.
如果你希望两个A对象被视为相等HashMap,必须重写equals(Object)在A定义一个A为等于另一个.