在读到重写hashCode()方法时,书上将的不是特别详细,产生了好多疑问,如:
Class Employee
{
public int hashCode()
{
return 7*name.hashCode()+11*new Double(salary).hashCode()+13*hireDay.hashCode();
}
}为什么一个对象的hashCode是由他的实例域的存储地址相加得到的,而且要用7,11,13这样的数字去乘?
Class Employee
{
public int hashCode()
{
return 7*name.hashCode()+11*new Double(salary).hashCode()+13*hireDay.hashCode();
}
}为什么一个对象的hashCode是由他的实例域的存储地址相加得到的,而且要用7,11,13这样的数字去乘?
这个例子我以前也看过,还记得这个例子之所以选择7,11,13好像是让Employee的hashCode由他的那三个属性的hashCode加权后均匀产生。
但这不是必须的。只是一种策略,但我不知道这种策略产生的依据。
只要生成的HASH值不同而已,加一些参数就更减少了偶然相同的机会。
实际上不加一般也没问题,String的hash值本来就是很乱的了