黑马程序员技术交流社区

标题: 关于重写hashCode方法的一些疑问? [打印本页]

作者: 刘松老师    时间: 2013-3-19 23:57
标题: 关于重写hashCode方法的一些疑问?
public int hashCode(){
                System.out.println(this.name+"....hashCode...");
                return name.hashCode()+age*37;
}
上面代码中return name.hashCode()+age*37;是什么意思?为什么要乘以37呢?乘以其他可以吗?
作者: 刘辉    时间: 2013-3-20 00:09
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等都行,有空可以自己试一试
作者: itserious    时间: 2013-3-20 00:11
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 的最大值。





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