所以我正在尝试重写 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/