黑马程序员技术交流社区

标题: 关于hashCode [打印本页]

作者: 杨鹏鹏    时间: 2012-8-21 14:30
标题: 关于hashCode
看毕老师的视频 ,
public int hashCode(){
   return  name.hashCode()+age*27// 这儿的age*27 没想明白,谁能解释一下吗
}
作者: 李知伦    时间: 2012-8-21 15:12
重写hasCode和equals方法来判断集合元素相等的吧,
27应该不是很重要
作者: 赵俊杰    时间: 2012-8-21 15:21
本帖最后由 赵俊杰 于 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;
基本避免了上述"判断不准"的情况的发生。
作者: 杜鹏云    时间: 2012-8-21 15:55
主要是为了实现返回的hash()值唯一
作者: 芦曦    时间: 2012-8-21 16:40
因为某些情况的发生会导致哈希值相同,哈希值相同就需要去判断equals,这样就比较低效了,所以为了尽量保证哈希值的唯一性,可以为age添加一个值。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2