在 Java 中,我有一个VertexJava3D 类的子类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在对象创建时生成一个随机值,并将其用于哈希码。这是一个好主意吗?为什么不)?