java - 对集合使用我自己的 equals 方法

标签 java overriding equals

所以我正在尝试重写 equals(),这样当我创建一组我的对象时它会正常运行。

这是我正在使用的代码(暂时忽略类型安全)

@Override
public boolean equals(Object o) {
    MyClass myObject1 = (MyClass) o;
    MyClass myObject2 = (MyClass) this;
    if (myObject1.property == myObject2.property)
        return true;
    return false;
}

您可以假设只有一个属性,并且它是一种基本类型,例如 int。

但是,如果我将两个相同的对象添加到一个集合中,它们都会被添加。

最佳答案

这是因为你违反了Java requirement for overriding equals :

Note that it is generally necessary to override the hashCode method whenever this method is overridden, so as to maintain the general contract for the hashCode method, which states that equal objects must have equal hash codes.

如果没有为相同对象返回相同值的 hashCode 实现,哈希集通常会将具有不同哈希码的对象视为不同的对象,除非存在哈希冲突。

一旦你为你的类实现了hashCode,问题就迎刃而解了。

关于java - 对集合使用我自己的 equals 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42633559/

相关文章:

ios - 为什么我们要覆盖最初为 nil 的变量而不是简单地设置它们?

java - 泛型可以消除困惑

java - Path.equals 方法说明

java - 为什么 == 运算符在这里不起作用,但 equals 在 java 中起作用

java - 观察者模式与 MVC

带有监听器的 JavaFX TextArea 给出 : “java.lang.IllegalArgumentException: The start must be <= the end”

django - 覆盖 Django 中的 brabeion 模板路径

java - 为什么 'delete document' 在 lucene 2.4 中不起作用?

java - 比较 AtomicInteger 而不设置它

java - 为什么更改用作 HashMap 中键的对象的哈希码会使查找返回 null?