我注意到 hash function code作为 java.util.Hashtable#get(K key)
的一部分执行以下操作:int index = (hash & 0x7FFFFFFF) % tab.length;
。这个二进制“与”运算是否仅用于重置符号位?从而避免负面的表访问。
更新:他们用 0x7FFFFFFF 而不是 0xEFFFFFFF 进行“和”这一事实让我感到困惑。为什么符号需要一个完整的字节而不是单个位?
最佳答案
是的,没错。这是为了避免对哈希表中的基础数组进行负索引。
请注意,在 C 或 C++ 等具有无符号整数类型的语言中,只需在哈希函数中使用无符号值即可避免这种情况。
编辑:鉴于您关于为什么 0x7FFFFFF
与 0xEFFFFFF
的新问题 - 这些数字中的第一个全为 1,最高位设置为0.其中第二个没有这个属性;结果是 1110
,后面跟着很多 1。因此,用第一个屏蔽会清除 1 位,而用第二个屏蔽可能不会这样做。
希望这对您有所帮助!
关于java - 按位与在 Java 哈希表哈希查找中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14428347/