黑马程序员技术交流社区

标题: hashCode的覆写问题 [打印本页]

作者: 龚振 龚振 龚振    时间: 2012-4-12 22:54
标题: hashCode的覆写问题
本帖最后由 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;
    }


作者: 周海诚    时间: 2012-4-29 13:22
毕老师说的是可以有效避免,但不是绝对避免,

作者: 林德燚    时间: 2012-4-29 14:33
有这样说吗?出现相同的hashCode是正常的,只能尽量避免出现
作者: 毕博    时间: 2012-4-29 15:20
先这么说,
为什么调用hashcode,
因为有些数据存储的时候,存储的结构是判断哈希值。
哈希值相同,被认为是相同的。
而这里就是老师复写hashcode是为了什么呢,就是不想用默认的hashcode方法。因为有可能判断相等的太多(当数据很多的时候更明显)。
所以我们复写hashcode。
至于返回的值,return name*什么+age*什么。 都行,而且,不一定要乘上,可以加可以减,只要降低相同比较的次数就行。
作者: 胡奎    时间: 2012-4-29 20:49
这样做是为了避免hashCode值相同,但不能绝对避免,只是相对来说相同值概率小而已。




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