ConcurrentHashMap源码解析

ConcurrentHashMap源码解析

面试题:对象是key的时候,concurrentHashMap怎么put的?

关键点在于
(1)求hash值:

//ConcurrentHashMap.java
  static final int spread(int h) {
        return (h ^ (h >>> 16)) & HASH_BITS;
    }

(2)put过程关键点

      for (Node<K,V> e = f;; ++binCount) {
                                K ek;
                                if (e.hash == hash &&
                                    ((ek = e.key) == key ||
                                     (ek != null && key.equals(ek)))) {
                                    oldVal = e.val;
                                    if (!onlyIfAbsent)
                                        e.val = value;
                                    break;
                                }
                                Node<K,V> pred = e;
                                if ((e = e.next) == null) {
                                    pred.next = new Node<K,V>(hash, key,
                                                              value, null);
                                    break;
                                }
                            }

如果key的hash相等并且(key的地址相等或者key不为空且key的equals方法返回true),则说明两个key一致,需要覆盖原来concurrentHashMap的value。否则新建一个key、value放入table

如果有不明白的可以关注我加我微信哦~ 麻烦给个赞,谢谢

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容