我想将自定义类型的对象添加到集合中。我有几个相同的,即它们的公共(public)变量具有相同的值。
我不希望将“相同”对象的多个实例添加到集合中,但每次创建一个新对象时,它总是会被添加。
这是因为类 Object 的 equals 方法在对象上实现了最具辨别力的可能等价关系:“对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一对象时,此方法才返回 true (x == y 的值为真)。”
我可以重写这个对象的 equals 方法以不同地定义它吗?
谢谢大家问题解决了
Java 对象的相同性是通过覆盖 Java 对象的 equals() 方法定义的。
@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;
}
最佳答案
您需要覆盖 equals()
和 hashCode()
方法来告诉 HashSet 您认为什么是相等的。
如果您使用的是 TreeSet,则应改为实现 Comparable
。
关于java - Java对象的 "sameness"是怎么定义的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5221327/