用于在Java中的ConcurrentHashMap中计算段的哈希码的算法

时间:2018-05-10 15:21:00

标签: concurrenthashmap

用于计算Java中Concurrent HashMap中段的哈希码的算法是什么?

1 个答案:

答案 0 :(得分:0)

首先,我们知道并发HashMap被划分为有限数量的段。

Segment是Concurrent HashMap中的最终类。

         The definition of Segment is as below:

          /** Inner Segment class plays a significant role **/
               protected static final class Segment {
               protected int count;
              protected synchronized int getCount() {
               return this.count;
                }
                protected synchronized void synch() {}
                   }
                /** Segment Array declaration **/
             public final Segment[] segments = new Segment[32];//By default 
              // i am taking as 32.

让我通过采用ConcurrentHashMap类的put方法进行解释。

                put(Object key, Object value)

在将此地图放入这32个分段中的任何一个之前,我们需要 计算哈希码权限。

首先,我们计算键的哈希值:

                int hashVal = hash(key);
               static int hash(Object x) {
                int h = x.hashCode();
                return (h << 7) - h + (h >>> 9) + (h >>> 17);
                 }

获取hashVal之后,我们可以如下确定细分:

                     Segment seg = segments[(hash & 0x1F)];     
              // segments is an array defined above 

这只是为了了解有关参考,请参考oracle文档。