以下是生成的hashCode
的示例 @Override
public int hashCode() {
int result;
long temp;
temp = x != +0.0d ? Double.doubleToLongBits(x) : 0L;
result = (int) (temp ^ (temp >>> 32));
temp = y != +0.0d ? Double.doubleToLongBits(y) : 0L;
result = 31 * result + (int) (temp ^ (temp >>> 32));
return result;
}
我想知道31 *和>>> 32
答案 0 :(得分:5)
对于>>> 32:long和double是64位,因为int是32位,所以为了得到一个int结果,一旦32的移位必须发生以保持信息。
31的乘法是一种典型的技术。 31是素数,并且在2 ^ 32内的重复乘法将遍历所有值。因此散列非常棒。 (一般而言)
答案 1 :(得分:2)
遵循“有效Java”(第38页)一书中描述的指导原则:
http://java.sun.com/developer/Books/effectivejava/Chapter3.pdf