我有一个包含许多bean类的项目,如ItemBean:
public class ItemBean
{
private String name;
private int id;
getters/setters...
}
我编写了一个自定义equals方法,因为如果它们具有相同的id和名称,则应将两个项视为相等,无论它们是否与内存中的相同对象相同。我现在正在研究编写自定义hashCode()函数。我查看了其他stackoverflow questions和this tutorial,但它们似乎过于笼统,而我正在寻找简单bean类的最佳实践。
我想出了这个方法:
已实施方法:
public final int hashCode()
{
if (cachedHashCode == 0)
{
int result = 17;
result = 31 * (result + id);
cachedHashCode = 31 * (result + name.hashCode());
}
return cachedHashCode;
}
将类似这样的哈希码方法建立在使其独特的类的所有属性上是一种好的做法吗?如果没有,这种方法的缺点是什么,哪些是更好的选择?如果一个我的bean类有10个属性而不是只有2个属性,那么XOR的10个属性是否是一个应该避免的昂贵操作?
答案 0 :(得分:1)
来自Object.hashCode()
的JavaDoc:
如果两个对象根据equals(Object)方法相等,则对两个对象中的每一个调用hashCode方法必须产生相同的整数结果。
这可以通过使用hashCode
中equals
中使用的所有成员来实现,反之亦然。
What is a best practice of writing hash function in java?中描述的alorightms值得关注。
我不担心性能。 ^
是一个非常基本的运算符,可以由JVM优化。