在 Java 中,我有一个Vertex
Java3D 类的子类Point3f
。现在根据其坐标值进行Point3f
计算,但对于我的类,我想更严格:两个顶点只有在它们是同一个对象时才相等。到现在为止还挺好:equals()
Vertex
class Vertex extends Point3f {
// ...
public boolean equals(Object other) {
return this == other;
}
}
我知道这违反了 的合同equals()
,但是因为我只会将顶点与其他顶点进行比较,所以这不是问题。
现在,为了能够将顶点放入 aHashMap
中,该hashCode()
方法必须返回与 一致的结果equals()
。它目前是这样做的,但它的返回值可能基于 的字段Point3f
,因此会为Vertex
具有相同坐标的不同对象提供哈希冲突。
因此,我想基于对象的地址,而不是从的字段hashCode()
中计算它。Vertex
我知道这个Object
类是这样做的,但我不能调用它的hashCode()
方法,因为Point3f
它会覆盖它。
所以,实际上我的问题是双重的:
- 我什至要这么浅
equals()
? - 如果是,那么,我如何获取对象的地址来计算哈希码?
编辑:我只是想到了一些东西......我可以int
在对象创建时生成一个随机值,并将其用于哈希码。这是一个好主意吗?为什么不)?