Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从double计算HashCode_Java_Double_Overriding_Long Integer_Hashcode - Fatal编程技术网

Java 从double计算HashCode

Java 从double计算HashCode,java,double,overriding,long-integer,hashcode,Java,Double,Overriding,Long Integer,Hashcode,其中有一个复杂类的示例。该类重写了使用hashDouble方法的hashCode,我有一个问题 private int hashDouble(double val) { long longBits = Double.doubleToLongBits(re); return (int) (longBits ^ (longBits >>> 32)); } 它的用途是什么?(int)(longBits^(longBits>>>32))?双精度值是64位宽,但哈希方

其中有一个复杂类的示例。该类重写了使用hashDouble方法的hashCode,我有一个问题

private int hashDouble(double val) 
{
    long longBits = Double.doubleToLongBits(re);
    return (int) (longBits ^ (longBits >>> 32));
}

它的用途是什么?(int)(longBits^(longBits>>>32))?

双精度值是64位宽,但哈希方法返回的int只有32位。 为了实现更好的散列值分布(与简单地将高32位条带化相比)

代码用于合并计算中通过右移值对齐的上32位(包含符号、指数和尾数的一些位)


图像源维基百科

嗯,要返回哈希代码。。。你的问题到底是什么?长比特背后的意图是什么?例如,为什么不只执行
longBits>>32
。根据java文档,
>
向右移动并填充零。因此,在该操作之后,前32位将为零。因为散列没有那么好?
(int)longbits
只考虑较小的32位
(longbits>>32)
只考虑较高的32位<代码>长位^(长位>>>32)使用所有64位