黑马程序员技术交流社区
标题:
关于重写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