hashCode实现

Jai*_*rat 0 java hashcode

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 ???

Lou*_*man 9

你没有覆盖equals(Object),所以他们不比较相等.

仅仅因为两个对象具有相同的哈希码并不意味着HashMap假设它们是相同的 - 事实上,如果是这样的话,那将是非常非常糟糕的.

如果你希望两个A对象被视为相等HashMap,必须重写equals(Object)A定义一个A为等于另一个.