Java 从double计算HashCode
其中有一个复杂类的示例。该类重写了使用hashDouble方法的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位宽,但哈希方
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位