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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 龚振 龚振 龚振 中级黑马   /  2012-4-12 22:54  /  2272 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 klas2008 于 2012-4-18 18:05 编辑

为什么老毕说hashCode用以下方式 (age*某个数),就不会出现重复了呢?
假如A的hashCode为4,年龄为10, 4+10*37=374
B的hasCode为33   年龄为11, 11*37=407
那不是一样的重复了吗?
public int hashCode()
    {
        System.out.println(this.name+"....hashCode");
        return name.hashCode()+age*37;
    }

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

4 个回复

倒序浏览
毕老师说的是可以有效避免,但不是绝对避免,

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
有这样说吗?出现相同的hashCode是正常的,只能尽量避免出现
回复 使用道具 举报
先这么说,
为什么调用hashcode,
因为有些数据存储的时候,存储的结构是判断哈希值。
哈希值相同,被认为是相同的。
而这里就是老师复写hashcode是为了什么呢,就是不想用默认的hashcode方法。因为有可能判断相等的太多(当数据很多的时候更明显)。
所以我们复写hashcode。
至于返回的值,return name*什么+age*什么。 都行,而且,不一定要乘上,可以加可以减,只要降低相同比较的次数就行。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
这样做是为了避免hashCode值相同,但不能绝对避免,只是相对来说相同值概率小而已。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马