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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘松老师 高级黑马   /  2013-3-19 23:57  /  1859 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public int hashCode(){
                System.out.println(this.name+"....hashCode...");
                return name.hashCode()+age*37;
}
上面代码中return name.hashCode()+age*37;是什么意思?为什么要乘以37呢?乘以其他可以吗?

点评

如果你的问题已经得到解决,请及时将主题改为[已解决],如果还有问题请继续追问,否则将扣除技术分,谢谢  发表于 2013-3-20 12:12

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

2 个回复

倒序浏览
public int hashCode(){
                 System.out.println(this.name+"....hashCode...");
                 return name.hashCode()+age*37;
}
这样是为了避免不同的两个元素的name.hashCode()值加上age的值相同,因为你可能有两个元素,第一个的name属性的hashcode()值是1,第一个age的值是3,;第二个元素的name属性的hashcode()值是3,第二个age的值是1.因为你最终返回的是int型的两者相加的值,结果都是4,但是它们的属性不相同,所以*37就避免了此种情况的发生,你也可以乘以11,13等都行,有空可以自己试一试

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
public int hashCode(){
                System.out.println(this.name+"....hashCode...");
                return name.hashCode()+age*37;
}
上面代码中return name.hashCode()+age*37;是什么意思?为什么要乘以37呢?乘以其他可以吗?

回答:  在复盖hashCode()的方法需要一个 int类型的返回值。  你可以自已任要想要的值,但是你最好是一个有意义的值。
            return name.hashCode()+age*37; 这句话就是用,对象的名字的哈希值再加上一个数,主要是为了避免重复。
            所以后面的+age*37,可以任竟改变。
注意:注意返回值的大小,  int 类型的范围是有限的,你设的值,不能让返回值超也了int 的最大值。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

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