废话不说,直接上代码 private int a;
private long b;
private boolean c;
private String d;
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + a;
result = prime * result + (int) (b ^ (b >>> 32));
result = prime * result + (c ? 1231 : 1237);
result = prime * result + ((d == null) ? 0 : d.hashCode());
return result;
}
这里,一开始给final int prime = 31;是什么含义? 为什么是31,不是32,33或者其他??
(c ? 1231 : 1237); 这里的1231和1237又有什么含义??
private long b;
private boolean c;
private String d;
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + a;
result = prime * result + (int) (b ^ (b >>> 32));
result = prime * result + (c ? 1231 : 1237);
result = prime * result + ((d == null) ? 0 : d.hashCode());
return result;
}
这里,一开始给final int prime = 31;是什么含义? 为什么是31,不是32,33或者其他??
(c ? 1231 : 1237); 这里的1231和1237又有什么含义??
解决方案 »
- http://jinxinxin_bear_os.download.csdn.net/
- 关于数据查询某部分时间段数据问题?
- 有没有人用httpclient登陆过google,我试了半天都得不到cookies,大家帮我看看。
- 请教几个JAVA基础问题?(我刚学不久,别见笑!!!)
- 今天做的一个小题: 要用到两个变量 ,是俩日期:- 一个从数据库中读出来后, 月份和日子为单数是自动加零的。而另一个没有从数据库中读,月份单数不加零的,请问大虾们 java 中哪个类的方法可以转换它啊?。 感谢。。
- 快过年了,散点分大家同乐~
- 背景为什么没有变化?
- 求助:java正则替换字符串问题
- java操纵硬件的copy文件的小问题??
- 谁有《JAVA2类库大全》这本书的完全版下载
- 问一个超级弱的问题,求素数中为什么要先开平方
- jvm里面内存分配的问题
1231,1237是第202,203位质数.
Boolean的文档里写到:true的时候hasCode返回1231,
false的时候返回1237,
质数在进行Xor,乘法等运算的时候很少重复.
至于为什么选1231和1237,可以换个问题,为什么不呢?
计算机中数据的比较可以分两种情况:
1>值比较(用equals()方法)
2>内存地址比较(用hashCode()方法)
当然上面的无论是equals()还是hashCode()你都可以重写
@Override
public int hashCode() //一般自定义的类的这个方法都是自己重写而不是用Eclipse工具生成
{
final int prime = 31; //这里的数字最好是一个质数,这里设计到一个哈希表的查找
int result = 1;
result = prime * result + a;
result = prime * result + (int) (b ^ (b >>> 32));
result = prime * result + (c ? 1231 : 1237);
result = prime * result + ((d == null) ? 0 : d.hashCode());
return result;
}
Set集合你应该知道吧:Set (不允许放重复值)
它的比较标准就是:
1>比较equls(),如果相等,就判定它们相等;
2>如果equls()不相等,就比较hashCode()
如果hashCode()相等,就判定这两个对象相等
否则不相等
equls()是判定得第一标准
hashCode()是第二标准
应该是先用hashcode快速比较出不同的,用equals再比较hashcode过滤出的相同的,只有equals返回ture,才真正认为对象相等。
上面的话是经典哟,如果没有理解,估计hashcode的含义就没有理解,也不可能用好hashcode。