我有一个 person 类,它有一个名字和 HashSet 中的 friend 列表。
我想重写此 Person 类的 equals
方法。以下是我到目前为止所写的内容。
但我对此不确定,因为我知道 HashSet 不一定必须按顺序,而且我还听说我必须重写 HashCode 方法。
我应该在下面的代码中进行哪些修改才能正确实现 equals 方法?
public boolean equals(Note target){
if(this.name==target.getName() && this.friends == target.getFriends()){
return true;
}
return false;
}
public HashSet<Person> getFriends(){
return this.friends;
}
编辑
//override hashCode()
public int hashCode() {
return name.hashCode() + friends.hashCode();
}
最佳答案
==
运算符对于 HashSet
和 name
来说肯定是错误的。如果你想在java中比较对象,请使用equals方法。 ==
运算符比较 JVM 管理的内部对象 ID。 HashSet
的 equals
方法的约定位于 AbstractSet.equals()
中。 .
@Override
public boolean equals(Object o){
if (o instanceof Note) {
Note target = (Note) o;
if(this.name.equals(target.getName()) && this.friends.equals(target.getFriends())){
return true;
}
}
return false;
}
您可能还想检查 null
,也许 name
和 fiends
可以为 null。
关于equals
和hashCode
已经写了很多。最好的方法是查看 JavaDoc 中的 lava.lang.Object.equals()
.
关于java - 将两个对象与哈希集进行比较的适当方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7300239/