get方法拿到key之后调用hashMap的get方法,get方法内部会去定义一个Node节点,之后会调用getNode方法去获取value值
首先去hash这个key,然后再调用getNode方法的时候会优先去比较第一个节点的数据,如果hash值是一致的话,就返回node节点的value,如果头结点与key的hash之后不相同,那就根据当前的Node节点去分别调用不同的方法,如果是正常的链表,就去调用后一个去依次比较,如果是红黑树,就去红黑树去查询对应的子节点的value.
源码
public V get(Object key) {
Node<K,V> e;
return (e = getNode(hash(key), key)) == null ? null : e.value;
}
final Node<K,V> getNode(int hash, Object key) {
Node<K,V>[] tab;
Node<K,V> first,
e;
int n; K k;
if ((tab = table) != null && (n = tab.length) > 0 &&
(first = tab[(n - 1) & hash]) != null) {
if (first.hash == hash && // always check first node
((k = first.key) == key || (key != null && key.equals(k))))
return first;
if ((e = first.next) != null) {
if (first instanceof TreeNode)
return ((TreeNode<K,V>)first).getTreeNode(hash, key);
do {
if (e.hash == hash &&
((k = e.key) == key || (key != null && key.equals(k))))
return e;
} while ((e = e.next) != null);
}
}
return null;
}