java - 按位与在 Java 哈希表哈希查找中?

标签 java data-structures hash hashtable bit-manipulation

我注意到 hash function code作为 java.util.Hashtable#get(K key) 的一部分执行以下操作:int index = (hash & 0x7FFFFFFF) % tab.length;。这个二进制“与”运算是否仅用于重置符号位?从而避免负面的表访问。

更新:他们用 0x7FFFFFFF 而不是 0xEFFFFFFF 进行“和”这一事实让我感到困惑。为什么符号需要一个完整的字节而不是单个位?

最佳答案

是的,没错。这是为了避免对哈希表中的基础数组进行负索引。

请注意,在 C 或 C++ 等具有无符号整数类型的语言中,只需在哈希函数中使用无符号值即可避免这种情况。

编辑:鉴于您关于为什么 0x7FFFFFF0xEFFFFFF 的新问题 - 这些数字中的第一个全为 1,最高位设置为0.其中第二个没有这个属性;结果是 1110,后面跟着很多 1。因此,用第一个屏蔽会清除 1 位,而用第二个屏蔽可能不会这样做。

希望这对您有所帮助!

关于java - 按位与在 Java 哈希表哈希查找中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14428347/

相关文章:

authentication - HTTP Auth over SSL 安全吗?

java - Jsp/MySQL- 将 SELECT 查询的输出存储到字符串中?

java - 如何连续触发或发送 Intent (无需单击按钮)

c - while循环条件检查

javascript - 如何在 JavaScript 中实现堆栈和队列?

Javascript 哈希替换错误

java - 线性探测哈希表中数组 M 的大小应该有多大?

java - JPA 对 Java 8 新日期和时间 API 的支持

java - Aeron 基本 pub/sub 对在同一主机上连接,跨主机失败

合并两个图结构的部分的算法或理论?