我觉得
(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/