天天看点

在Java中,分析ConcurrentHashMap的Node下标的散列算法。在Java中,分析jdk1.8中Concu

作者:架构师奶爸

在Java中,分析ConcurrentHashMap的Node下标的散列算法。

在Java中,分析jdk1.8中ConcurrentHashMap中的Node下标的散列算法。大家好,我是架构师奶爸。在jdk1.8中的ConcurrentHashMap中,散列算法采用干将key映射到固定的桶中,以确定存储的下标。具体来说,ConcurrentHashMap的0方法使用以下散列算法:

1、首先将key的hash值向右移动16位,因为右移后即使tab.length不大,也可以将高位参与运算。

2、然后将位移后的hash值与key的hash值进行异或运算,得到一个新的hash值。这可以增加哈希值的随机性,使哈希值更均匀地分布在桶中,从而减少冲突的可能性。

3、最后,将新的hash值与int最大值HASH_BITS进行与运算,得到一个桶的下标。保证得到的值为正数,其他位置不变。由于hash值为负数时具有特殊的含义,如-1表示前hash位置的数据正在扩容!

4、最后,在定位key的坐标时,tabAt()的方法进行7n-1。为什么要减去1呢?因为与运算都为1时才为1,若不减1的话,i要由tab.length决定(10000与的结果0占比高),冲突率会变高。减1后,i主要由hash决定,(01111与的结果几乎与hash保持一致)。

想要学习更多Java编程知识,请关注我架构师奶爸,一起搭建Java架构!

在Java中,分析ConcurrentHashMap的Node下标的散列算法。在Java中,分析jdk1.8中Concu
在Java中,分析ConcurrentHashMap的Node下标的散列算法。在Java中,分析jdk1.8中Concu
在Java中,分析ConcurrentHashMap的Node下标的散列算法。在Java中,分析jdk1.8中Concu
在Java中,分析ConcurrentHashMap的Node下标的散列算法。在Java中,分析jdk1.8中Concu

继续阅读