gpt4 book ai didi

java - 将 HashSet 与用户类 Employee 一起使用

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:55:14 28 4
gpt4 key购买 nike

我知道这听起来是一个非常愚蠢的问题,但在我了解了 HashSet 以及我在执行以下代码时看到的内容后,我感到很困惑。

我有一个如下的 Employee 类(只保留相关的代码):

public class Employee {
//assume it has 3 variable name(String),salary(double) and id(int)
//assume the constructor, getter-setters are there

//following is my equals and hashCode implementation
public boolean equals(Employee e){
return name.equals(e.name);
}

public int hashCode(){
return id;
}
}

现在我有以下使用 HashSet 的代码:

Employee e1  = new Employee("Abc", 2.0, 1);
Employee e2 = new Employee("abc", 3.0, 4);
Employee e3 = new Employee("XYZ", 4.0, 3);
Employee e4 = new Employee("Mno", 5.0, 2);
Employee e5 = new Employee("Abc", 77.0, 1);

Set<Employee> sEmp = new HashSet<Employee>();
sEmp.add(e1);
sEmp.add(e2);
sEmp.add(e3);
sEmp.add(e4);
sEmp.add(e5);

for(Employee e : sEmp){
System.out.println(e);
}

所以我将所有对象数据打印在我的控制台上:

Abc 77.0 1
Abc 2.0 1
Mno 5.0 2
XYZ 4.0 3
abc 3.0 4

据我所知,该集合不允许重复,此重复项将根据 equals 检查(如果我错了请纠正我)。

此外,HashSet 使用hashCode,所以在上面的例子中,它不应该添加对象e5。但它成功将该元素添加到集合中。这让我很困惑。

(如果我错过了标准和所有其他内容,请忽略,我正在尝试理解概念/实现)。

已编辑:这听起来可能是个愚蠢的问题,但我正在准备认证并试图了解这些东西是如何工作的。

最佳答案

您正在重载 equals 而不是覆盖它。它的参数应该是 Object 类型。

而且您的 hashCode 正在检查 idequals 正在检查 name。它们可能应该由相同的属性构建。

关于java - 将 HashSet 与用户类 Employee 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27203594/

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