gpt4 book ai didi

java - 可变对象的HashCode

转载 作者:行者123 更新时间:2023-12-01 17:00:08 28 4
gpt4 key购买 nike

假设我有一个对象。
它包含宽度和高度、x 和 y 坐标以及代表速度的 x 和 y。
我已经重写了 equals 方法,并通过比较宽度、高度、x 和 y 以及速度进行比较。
我应该如何处理哈希码?

我感到困惑的原因是它是一个移动的对象,我不确定应该使用什么来计算哈希码,值会不断变化,唯一保持静态的是大小真的。

最佳答案

根据Object.hashCode()有一个条款可以帮助您做出决定:

Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application.

由于您的 equals() 比较宽度、高度、x 和 y 以及速度,因此只要这些值发生变化,您的 hashcode() 就不会返回相同的哈希值。

为您提供的示例hashcode():

@Override
public int hashCode() {
int hash = 1;
hash = hash * 17 + width;
hash = hash * 31 + height;
hash = hash * 13 + x;
hash = hash * 13 + y;
hash = hash * 13 + velocity.hashcode();
return hash;
}

您可以进一步将哈希码存储在私有(private)变量中,并使用 dirty 标志来了解在任何参数发生变化时重新计算对象的哈希码。由于您没有在 hashcode() 方法中执行任何昂贵的操作,因此我认为您不需要这样做。

关于java - 可变对象的HashCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28247307/

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