IntelliJ IDEA如何生成哈希码?

use*_*444 4 java hashcode intellij-idea

这是生成的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;
    }
Run Code Online (Sandbox Code Playgroud)

我想知道那里31*和>>> 32

Joo*_*gen 5

对于>>> 32:long和double是64位,因为int是32位,所以为了得到一个int结果,一旦32的移位必须发生以保持信息.

31的乘法是一种典型的技术.31是素数,并且在2 ^ 32内的重复乘法将遍历所有值.因此散列非常棒.(一般来说)