gpt4 book ai didi

java - 如何从对象的地址计算 hashCode()?

转载 作者:搜寻专家 更新时间:2023-10-31 19:36:31 24 4
gpt4 key购买 nike

在 Java 中,我有一个 Java3D 类 Point3f 的子类 Vertex。现在 Point3f 根据其坐标值计算 equals(),但对于我的 Vertex 类,我想更严格:两个顶点仅如果它们是同一个对象,则相等。到目前为止,还不错:

class Vertex extends Point3f {

// ...

public boolean equals(Object other) {
return this == other;
}
}

我知道这违反了 equals() 的约定,但由于我只会将顶点与其他顶点进行比较,所以这不是问题。

现在,为了能够将顶点放入 HashMaphashCode() 方法必须返回与 equals() 一致的结果。它目前这样做,但可能将其返回值基于 Point3f 的字段,因此将为具有相同坐标的不同 Vertex 对象提供散列冲突。

因此我想将 hashCode() 基于对象的地址,而不是从 Vertex 的字段计算它。我知道 Object 类执行此操作,但我无法调用它的 hashCode() 方法,因为 Point3f 覆盖了它。

所以,实际上我的问题是双重的:

  • 我什至需要这样一个浅显的 equals() 吗?
  • 如果是,那么我如何获取对象的地址以从中计算哈希码?

编辑:我只是想到了一些事情......我可以在对象创建时生成一个随机的 int 值,并将其用于哈希码。这是一个好主意吗?为什么(不)?

最佳答案

使用 System.identityHashCode() 或使用 IdentityHashMap。

关于java - 如何从对象的地址计算 hashCode()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/128888/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com