1 public V get(Object key) { 2 Node[] tab; Node 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 }