gpt4 book ai didi

java - Java中Bean类的哈希函数

转载 作者:行者123 更新时间:2023-12-01 12:42:13 24 4
gpt4 key购买 nike

我有一个包含许多 bean 类的项目,例如 ItemBean:

public class ItemBean
{
private String name;
private int id;


getters/setters...
}

我编写了一个自定义 equals 方法,因为如果两个项目具有相同的 id 和名称,则应将其视为相等,无论它们在内存中是否是同一对象。我现在正在考虑编写自定义 hashCode() 函数。我看了其他stackoverflow questionsthis tutorial ,但它们似乎过于笼统,而我正在寻找简单 bean 类的最佳实践。

我想出了这个方法:

  • 使用缓存
  • 使用 ItemBean 的 equals 方法中涉及的所有属性
  • 使用 17/31“神奇数字”素数,如其他 stackoverflow 问题中所述。

实现方法:

public final int hashCode()
{
if (cachedHashCode == 0)
{
int result = 17;
result = 31 * (result + id);
cachedHashCode = 31 * (result + name.hashCode());
}

return cachedHashCode;
}

将像这样的哈希码方法基于类的所有使其唯一的属性是一个好习惯吗?如果不是,这种方法有哪些缺点以及更好的替代方法是什么?如果我的 bean 类有 10 个属性而不是只有 2 个,那么异或 10 个属性是否是一种成本高昂的操作,是否应该避免?

最佳答案

来自 Object.hashCode() 的 JavaDoc :

If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result.

这可以通过使用 hashCode 中用于 equals 的所有成员来实现,反之亦然。

What is a best practice of writing hash function in java?中描述的alorightms值得关注。

我不会担心性能。 ^ 是一个非常基本的运算符,可以由 JVM 进行优化。

关于java - Java中Bean类的哈希函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24992046/

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