IntelliJ IDEA如何生成哈希码?

时间:2011-11-16 09:13:22

标签: java intellij-idea hashcode

以下是生成的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

2 个答案:

答案 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