
Learn && Live
虚度年华浮萍于世,勤学善思至死不渝
前言
Hey,欢迎阅读Connor学Java系列,这个系列记录了我的Java基础知识学习、复盘过程,欢迎各位大佬阅读斧正!原创不易,转载请注明出处:http://t.csdn.cn/EbEHA,话不多说我们马上开始!
1.HashMap的get方法的执行过程?
public V get(Object key) {
Node<K,V> e;
// (1)
return (e = getNode(hash(key), key)) == null ? null : e.value;
// (6)
}
final Node<K,V> getNode(int hash, Object key) {
Node<K,V>[] tab; Node<K,V> first, e; int n; K k;
// (2)
if ((tab = table) != null && (n = tab.length) > 0 && (first = tab[(n - 1) & hash]) != null) {
// (3)
if (first.hash == hash && ((k = first.key) == key || (key != null && key.equals(k))))
return first;
// (4)
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);
}
}
// (5)
return null;
}
(1)调用get,计算key的哈希值,并将其与key作为参数传入getNode方法
(2)首先确保table不为空,根据key的哈希值计算在数组中的位置
(3)若当前位置元素与要查找的元素哈希值和key相同,则找到,返回该元素
(4)如果不同,则遍历当前链表或红黑树,直至找到key相同的元素并返回
(5)没有找到,返回null
(6)回到get,如果节点为空,则返回null;否则返回节点的value,由此可见HashMap的value也可为null
2.HashMap的get方法能否判断某个元素是否在map中?
不能。因为get返回null有两种情况:一是确实不存在,返回null;二是key对应的value为null
本文详细剖析了Java中HashMap的get方法执行流程,从计算key的哈希值到遍历链表或红黑树寻找匹配元素,揭示了HashMap如何高效查找元素。同时指出,get方法无法直接判断元素是否存在,因为null值可能表示未找到或value为null。
2283

被折叠的 条评论
为什么被折叠?



