在读到重写hashCode()方法时,书上将的不是特别详细,产生了好多疑问,如:
Class Employee
{
public int hashCode()
{
return 7*name.hashCode()+11*new Double(salary).hashCode()+13*hireDay.hashCode();
}
}为什么一个对象的hashCode是由他的实例域的存储地址相加得到的,而且要用7,11,13这样的数字去乘?

解决方案 »

  1.   

    那只是一个算法而已,你自己定义也可以啊!没啥特殊的!你可以先看看hash方面的知识!
      

  2.   

    随便啦,不过要符合一定的规范,equals为true的对象要有相同的hashCode,等等
      

  3.   

    同意楼上的说法。
    这个例子我以前也看过,还记得这个例子之所以选择7,11,13好像是让Employee的hashCode由他的那三个属性的hashCode加权后均匀产生。
    但这不是必须的。只是一种策略,但我不知道这种策略产生的依据。
      

  4.   

    我的理解:
    只要生成的HASH值不同而已,加一些参数就更减少了偶然相同的机会。
    实际上不加一般也没问题,String的hash值本来就是很乱的了
      

  5.   

    hashCode的算法是为了更好的让存入容器的object散列开,随机等概率分布在数轴上