Java | JDK8下的ConcurrentHashMap#get

 1  public V get(Object key) {
 2         Node<K,V>[] tab; Node<K,V> e, p; int n, eh; K ek;
 3          //寻址
 4         int h = spread(key.hashCode());
 5         if ((tab = table) != null && (n = tab.length) > 0 &&
 6             (e = tabAt(tab, (n - 1) & h)) != null) {
 7             //当头节点的hash值与key的hash值相同时,判断key的内容知否相同
 8             if ((eh = e.hash) == h) {
 9                 if ((ek = e.key) == key || (ek != null && key.equals(ek)))
10                     return e.val;
11             }
12             //如果头节点的hash值eh<0 红黑树存储 直接寻找
13             else if (eh < 0)
14                 return (p = e.find(h, key)) != null ? p.val : null;
15             //链表查找
16             while ((e = e.next) != null) {
17                 if (e.hash == h &&
18                     ((ek = e.key) == key || (ek != null && key.equals(ek))))
19                     return e.val;
20             }
21         }
22         return null;
23     }

 

posted @ 2019-09-07 12:27  听说这是最长的名字了  阅读(394)  评论(0编辑  收藏  举报