代码之家  ›  专栏  ›  技术社区  ›  Manish

为什么equals和hashcode不影响hashmap大小

  •  0
  • Manish  · 技术社区  · 6 年前

    我正在尝试使用hashmap测试一个自定义类,该类具有重写的equals和hashcode方法:

    public class Car {
    
    public int hashcode() {
        return 1;
    }
    
    @Override
    public boolean equals(Object o1) {
        return true;
    }
    }
    

    主要类别:

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        HashMap<Car,String> map = new HashMap<Car,String>();
        Car c1 = new Car();
        Car c2 = new Car();
        System.out.println(c2.equals(c1));
        System.out.println(c1==c2);
        map.put(c1, "car1");
        map.put(c2, "car2");
        System.out.println(map.size());
        System.out.println(map.get(c1));
    }
    

    我希望输出为1和car2,但它是2和car1。谁能解释原因吗。对于每个car对象,我的Equals是真的,hashcode也是一样的。

    谢谢

    0 回复  |  直到 6 年前
        1
  •  0
  •   Manish    6 年前

    那是个打字错误。哈希代码不会被覆盖。我创建了一个hashcode()方法,而不是hashcode()。纠正这一点提供了预期的结果。