天天看點

在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

繼續閱讀