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、迭代元素