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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨鹏鹏 中级黑马   /  2012-8-21 14:30  /  1574 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看毕老师的视频 ,
public int hashCode(){
   return  name.hashCode()+age*27// 这儿的age*27 没想明白,谁能解释一下吗
}

评分

参与人数 1黑马币 +30 收起 理由
张立江 + 30

查看全部评分

4 个回复

倒序浏览
重写hasCode和equals方法来判断集合元素相等的吧,
27应该不是很重要
回复 使用道具 举报
本帖最后由 赵俊杰 于 2012-8-21 15:27 编辑

有没有听到毕老师讲:
有个人,名字hashcode为40,年龄20岁,所以:他名字的hashcode+他的age=60;
还有个人,名字的hashcode为20,年龄40岁,他名字的hashcode+他的age=60;
这样的话,就判断不准了。
而如果让他们的age都乘以一个数字,比如3,那就形成了下面这样的情况:
public int hashCode(){
   return  name.hashCode()+age*3
}
再来算一下返回值:
第一个人:40+20*3=100;
第二个人:20+40*3=140;
基本避免了上述"判断不准"的情况的发生。

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1 赞一个!

查看全部评分

回复 使用道具 举报
主要是为了实现返回的hash()值唯一

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1 赞一个!

查看全部评分

回复 使用道具 举报
因为某些情况的发生会导致哈希值相同,哈希值相同就需要去判断equals,这样就比较低效了,所以为了尽量保证哈希值的唯一性,可以为age添加一个值。

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马