繁体   English   中英

IntelliJ IDEA如何生成哈希码?

[英]How does IntelliJ IDEA generate hash codes?

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

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

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

它遵循“有效Java”(第38页)一书中描述的指导原则:

http://java.sun.com/developer/Books/effectivejava/Chapter3.pdf

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM