Ska*_*dus 4 java dictionary equals hashcode
据我所知,如果我们想使用object作为键HashMap,我们需要实现hashCode和equals方法(在该类上)才能正常工作.但是在下面的代码中我使用了对象作为键,但没有在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)
默认实现equals(Object o)是this == o.由于您使用对象作为键,然后使用相同的实例来查询映射,因此它可以工作.但是,如果你已创建Employee e3 = new Employee (10, "Samad", 30),即使逻辑上它应该等于e1,它也不会有效,因为你没有实现hashCode()并且equals(Object)根据需要.