3 回答
TA贡献1793条经验 获得超6个赞
您需要覆盖类的equals和hashCode方法ThreeDimensionalPoint。
假设你的属性ThreeDimensionalPoint是维度 (x, y, z),下面是一个从 IntelliJ Idea 生成的例子。
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Coordinate that = (Coordinate) o;
if (x != that.x) return false;
if (y != that.y) return false;
return z == that.z;
}
@Override
public int hashCode() {
int result = x;
result = 31 * result + y;
result = 31 * result + z;
return result;
}
当您覆盖equalsand 时hashCode,您应该记住,
(1) 如果您的equals方法返回两个对象相同,那么您hashCode必须为它们返回相同的代码。否则,您将在 Hashtable 中看到不可预测的行为。
(2) 虽然不是必需的,但如果你的equals方法返回两个对象不相等,那么hashCode应该尝试为这两个对象生成两个不同的值。这有助于实现更好的性能。
添加回答
举报