用于计算Java中Concurrent HashMap中段的哈希码的算法是什么?
答案 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文档。