如何为Java对象定义"相同性"?

Ank*_*kur 4 java equality

我想将自定义类型的对象添加到Set.我有几个是相同的,即它们的公共变量具有相同的值.

我不希望将多个"相同"对象的实例添加到集合中,但每次创建新对象时,它总是被添加.

这是因为类Object的equals方法在对象上实现了最有区别的可能等价关系:"对于任何非空引用值x和y,当且仅当x和y引用同一对象时,此方法才返回true(x = = y的值为true)."

我可以覆盖此对象的equals方法以不同方式定义它吗?

谢谢大家,问题解决了

通过重写Java Object的equals()方法来定义java对象的相同性.

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((uri == null) ? 0 : uri.hashCode());
    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (!(obj instanceof Resource))
        return false;
    Resource other = (Resource) obj;
    if (uri == null) {
        if (other.uri != null)
            return false;
    } else if (!uri.equals(other.uri))
        return false;
    return true;
}
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 5

您需要覆盖equals() hashCode()方法来告诉HashSet您认为相同的内容.

如果您正在使用TreeSet,则应该实现Comparable.