hashCode的实现和自定义对象的equals,用作HashMap中的键

Ska*_*dus 4 java dictionary equals hashcode

据我所知,如果我们想使用object作为键HashMap,我们需要实现hashCodeequals方法(在该类上)才能正常工作.但是在下面的代码中我使用了对象作为键,但没有在Employee该类上实现上面两个方法,并且它工作正常.

你能否澄清为什么没有hashCode和它一起工作equals

public class Employee1 {
    Integer Roll;
    String Name;
    int age;

    Employee1(int roll,String name,int Age)
    {
            this.Roll =roll;
            this.Name= name;
            this.age =Age;
    }
}

public static void main(String ar[]) {
    Map<Employee, Integer> ObjectAsKeyMap = new HashMap<Employee, Integer>();
    Employee e1 = new Employee(10, "Samad", 30);
    Employee e2 = new Employee(50, "Sahar", 20);
    ObjectAsKeyMap.put(e1, 10);
    ObjectAsKeyMap.put(e2, 20);
    if (ObjectAsKeyMap.containsKey(e1))
        System.out.println("this Object is already present in HashMap Value="+ObjectAsKeyMap.get(e1));
}
Run Code Online (Sandbox Code Playgroud)

输出:

this Object is already present in HashMap Value=10
Run Code Online (Sandbox Code Playgroud)

Mur*_*nik 5

默认实现equals(Object o)this == o.由于您使用对象作为键,然后使用相同的实例来查询映射,因此它可以工作.但是,如果你已创建Employee e3 = new Employee (10, "Samad", 30),即使逻辑上它应该等于e1,它也不会有效,因为你没有实现hashCode()并且equals(Object)根据需要.