A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑齐育 中级黑马   /  2013-10-14 16:07  /  1143 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 郑齐育 于 2013-10-15 10:28 编辑

在集合视频中讲到为了尽量保证hashCode()返回值的唯一性,复写hashCode()的代码为public int hashCode(){   return name.hashCode()+age*39;
}

这里age*39如何能减少函数返回值相同的可能性?

评分

参与人数 1技术分 +1 收起 理由
李江 + 1

查看全部评分

2 个回复

倒序浏览
是的,正好我也在看这里。举个例子吧:
    如果用return name.hashCode()+age,;这个代码,如果第一个对象的name.hashCode()值为10,age是20,那么二者的和是30,也就是返回值为30;而第二个对象name.hashCode()值为20,age是10,这样第二个对象的返回值也是30。如此一来这两个不同对象的hash值不就一样了吗,
    而如果使用return name.hashCode()+age*39;同样的情况,第一个对象name.hashCode()值为10,age是20 ,那么返回return name.hashCode()+age*39就是返回10+20*39=790.再来第二个对象,name.hashCode()值为20,age是10,那么返回return name.hashCode()+age*39就是返回20+10*39=410.这样计算二者的hash值就不相同了,从而减少了函数返回值相同的可能性。希望对你有帮助。

评分

参与人数 1技术分 +1 收起 理由
To + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
To 金牌黑马 2013-10-14 19:26:36
藤椅
楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
如果不会修改请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马