gpt4 book ai didi

java - 对象相等但仍添加到 hashSet 中?

转载 作者:行者123 更新时间:2023-12-01 06:10:46 25 4
gpt4 key购买 nike

我正在将对象添加到 hashSet ,iam 重写 hashcode() 和 equals() 。我故意在这些中传递不同的实例变量

哈希码是不同的,但对象是相等的,它仍然将两者插入到哈希集中

代码:

HashSet hs = new HashSet();
employee e1 = new employee();
employee e2 = new employee();
e1.setname("amol1"); e1.setcity("bombay");
e2.setname("amol1"); e2.setcity("delhi");
System.out.println("e1 --> "+e1.hashCode()+ " and e2 --> " +e2.hashCode() + " " + e1.equals(e2));
hs.add(e1); hs.add(e2)

重写方法:

  @Override
public int hashCode()
{
return city.hashCode();
}

@Override
public boolean equals(Object o)
{
employee e = (employee)o;
return getname().equalsIgnoreCase(e.getname());
}

最佳答案

如果名称为“Andrucz”的员工应等于名称为“andrucz”的员工,则两个实例应具有相同的 hashCode,因此您必须使用 toLowerCase() 生成它>toUpperCase().

还记得按照 Java 约定来命名类。类不应命名为 Employee,而应命名为 Employee。

还要记住检查 equals 方法参数是否是 Employee 类的实例。

@Override
public int hashCode() {
return getName().toUpperCase().hashCode();
}

@Override
public boolean equals(Object o) {
if (o instanceof Employee) {
Employee e = (Employee) o;
return getName().equalsIgnoreCase(e.getName());
}
return false;
}

关于java - 对象相等但仍添加到 hashSet 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35354380/

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