gpt4 book ai didi

java - 谁能解释一下这个哈希函数背后的逻辑?

转载 作者:行者123 更新时间:2023-12-01 18:43:17 24 4
gpt4 key购买 nike

谁能给我解释一下这个哈希函数背后的逻辑吗?

static int hash(int h) {
h ^= (h >>> 20) ^ (h >>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);
}

我通过了key.hashCode()这个函数给了我哈希值。根据这个值和数组大小,我计算数组的索引。我只是不理解此方法中使用的运算符。

  1. 这是什么 ^运算符在此上下文中执行此操作。它是否检查 !=
  2. 无符号右移 >>> 的作用是什么?我们在 Java 中没有 Unsigned int,对吗?
  3. 如何为该函数选择值 20、12、7 和 4?是吗预定义还是用户定义?

key.hashCode()传递给这个哈希函数的是 79847235 。谁能解释一下内部发生了什么以返回最终的哈希值。

最佳答案

看看下面的内容:

Bitwise and Bit Shift Operators

~ Unary bitwise complement
<< Signed left shift
>> Signed right shift
>>> Unsigned right shift
& Bitwise AND
^ Bitwise exclusive OR
| Bitwise inclusive OR

无符号右移相关,请参阅:unsigned right Shift '>>>' Operator in Java

此外,对于 >>> 我认为:

>>> 运算符将表达式 1 的位右移表达式 2 中指定的位数。零从左侧开始填充。向右移出的数字将被丢弃。所以这种转变不尊重符号。

那么这个函数是做什么的...

  • (h >>> 20) 将 h 除以 2 的 20 次方。(向右移动 20 次)。另外,这意味着如果您的数字为负数,则不会继续如此。
  • (h >>> 12) 将 h 除以 2 的 12 次方。(向右移动 12 次)...同样与负数相同。
  • 然后将两个结果进行异或,然后再次与原始 H 进行异或。
  • 接下来,将进行更多的异或运算来计算最终的哈希值。

编辑:注意到这已在接受的答案中进行了广泛分析:Understanding strange Java hash function

关于java - 谁能解释一下这个哈希函数背后的逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19016928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com