java - 将两个对象与哈希集进行比较的适当方法是什么?

标签 java hashset

我有一个 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();
}

最佳答案

== 运算符对于 HashSetname 来说肯定是错误的。如果你想在java中比较对象,请使用equals方法。 == 运算符比较 JVM 管理的内部对象 ID。 HashSetequals 方法的约定位于 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,也许 namefiends 可以为 null。

关于equalshashCode已经写了很多。最好的方法是查看 JavaDoc 中的 lava.lang.Object.equals() .

关于java - 将两个对象与哈希集进行比较的适当方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7300239/

相关文章:

java - Future.cancel(false) 的用例?

java - 非法参数异常 : Numbers of source Raster bands and source color space components do not match For a color image Exception

java - 如何实例化同一对象的两个线程,并让对象打印不同的内容

java - 填充需要 1000 个其他文件中的值的文件 - Java

java - 使用 Selenium 检测 Excel 文件

java - 如何在 Android 应用程序中使用 TensorflowInferenceInterface

使用Sets进行Java彩票模拟,未生成正确数量的随机结果或正确比较Sets

java - set.contains() 和多态性?

Java : HashSet vs. 哈希表

java - Java 中的 HashMap 无法散列 MyObject