Java 7之多线程并发容器 - ConcurrentHashMap(二)

2014-11-24 02:40:31 · 作者: · 浏览: 4
(hash, key, value, first); int c = count + 1; if (c > threshold && tab.length < MAXIMUM_CAPACITY) rehash(node); else setEntryAt(tab, index, node); ++modCount; count = c; oldValue = null; break; } } } finally { unlock(); } return oldValue; }

3、删除元素


public V remove(Object key) {
    int hash = hash(key);
    // 根据hash值,找到key对应的Segment片段
    Segment
  
    s = segmentForHash(hash);
    return s == null   null : s.remove(key, hash, null);
}
  
如果元素为null,则直接返回,否则调用Segment类中的remove()方法,源代码如下:

 final V remove(Object key, int hash, Object value) {
            if (!tryLock())
                scanAndLock(key, hash);
            V oldValue = null;
            try {
                HashEntry
  
   [] tab = table;
                int index = (tab.length - 1) & hash;
                HashEntry
   
     e = entryAt(tab, index); HashEntry
    
      pred = null; while (e != null) { K k; HashEntry
     
       next = e.next; if ((k = e.key) == key || (e.hash == hash && key.equals(k))) { V v = e.value; if (value == null || value == v || value.equals(v)) { if (pred == null) setEntryAt(tab, index, next); else pred.setNext(next); ++modCount; --count; oldValue = v; } break; } pred = e; e = next; } } finally { unlock(); } return oldValue; }
     
    
   
  


4、迭代元素