我觉得

(hash >>> segmentShift) & segmentMask


等于

(hash >>> segmentShift)


例如,
ssize是16,sshift是4,所以segmentShift是28,segmentMask是15

hash >>> segmentShift


将高4位,当使用segmentMask进行操作时,没有任何改变。

我误会了什么?

最佳答案

好吧,我从这里了解到的是整个操作


(哈希>>> segmentShift)和segmentMask


用于查找表中段的位置。正如您已经提到的那样,(hash >>> segmentShift)用于获取密钥哈希的前4位。

但是段掩码的主要工作是将段平均分配到段表数组中。
ConcurrentHashMap中有许多段,因此为了避免冲突,使用了此段掩码。
段掩码为[(2的幂)-1]。

这个概念类似于HashMap,其中[hash&(length_of_hashmap-1)]用于在hashmap中查找键的索引。

哈希图的长度始终为2的幂,在这种情况下,segmentmask也为(2的幂)-1。

它与hashmap的hashmap%size的概念相同,因此索引不会超出hahsmap的长度。

关于java - segmentMask在Java ConcurrentHashMap中是什么意思,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16409674/

10-14 11:18