Connor学Java - HashMap get方法执行过程

本文详细剖析了Java中HashMap的get方法执行流程,从计算key的哈希值到遍历链表或红黑树寻找匹配元素,揭示了HashMap如何高效查找元素。同时指出,get方法无法直接判断元素是否存在,因为null值可能表示未找到或value为null。

在这里插入图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ConnorYan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值