gpt4 book ai didi

java - hashCode 在 Java 中如何工作

转载 作者:行者123 更新时间:2023-12-01 23:08:15 25 4
gpt4 key购买 nike

我有一个 Employee 类,并且我重写了 hashCode() 方法,而不是 equals() 方法

public class Employee {
public int id;
public String name;
public Employee (int id, String name) {
this.id = id;
this.name = name;
}
@Override
public int hashCode() {
return name.hashCode();
}
}

现在客户端添加 3 个数据,其中 hashCode() 将相同。

public class EmployeeTest {
public static void main(String...args) {
Employee emp1 = new Employee(11, "Arunan");
Employee emp2 = new Employee(22, "Arunan");
Employee emp3 = new Employee(33, "Arunan");

HashMap<Employee,Employee> map = new HashMap<>();
map.put(emp1, emp1);
map.put(emp2, emp2);
map.put(emp3, emp3);

Employee emp = map.get(emp3);
System.out.println(emp.id);
}
}

现在根据我的理解,上述 3 个对象最终将位于 hashmap 中的同一个存储桶中。由于equals()没有实现,HashMap很难识别特定的对象。但在上面的程序中,我得到了 emp3 对象,并且它正确地获取了 emp3 对象。 HashMap 如何工作?

最佳答案

你说的对,他们最终都在同一个桶里。

如果没有重写的 equals 方法,JVM 将仅比较对象引用是否相等。

在您的情况下,您将与放入 map 中的对象传递给 map.get() 相同的对象,因此引用将相等,因此它与对象匹配。

尝试创建:

Employee emp3CantFindMe = new Employee(33, "Arunan")

您会发现尝试从 map 中检索它会导致 null,即使它看起来与 emp3“相同”。

关于java - hashCode 在 Java 中如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22449772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com