探讨ConcurrentHashMap与HashMap中reHash过程

春秋苣 发布于 2016/11/02 17:08
阅读 425
收藏 0

ConcurrentHashmapreHash过程利用了元素产生索引只有两种要么为原索引,要么为原基础+2^(K+1)的巧妙特性,能够将同一个桶中的最后一个或者几个相同索引的元素的引用直接指向新桶中的特定索引位置,其他的则是一个一个克隆,重新开辟内存空间进行复制。

而HashMap中reSize过程则是直接计算原元素的Hash值,重新指向,但是不再重新new Entry对象。

为什么ConcurrentHashmap要重新生成hashEntry呢?而不是直接将原有的Entry对象重新指向?

加载中
0
yangqq
yangqq

具体看源码 hashmap中的entry定义:

final K key;
        V value;
        Entry<K,V> next;
        int hash;
concurrentHahsmap中的定义:
final K key;                       
     final int hash;                   
     volatile V value;                 
     final HashEntry<K,V> next;



注意这个next 变量 final的定义是关键
春秋苣
春秋苣
谢谢,已经看到了,刚才没注意这茬了,一致关注点在索引值计算方式,与运算的巧妙!
返回顶部
顶部