欢迎访问宙启技术站
智能推送

Java HashMap函数: 获取指定key的value(get)

发布时间:2023-06-04 05:45:54

Java中,HashMap是一种高效的、无序的、基于哈希表的Map接口实现。它提供了插入、删除和搜索的常数时间复杂度,并且允许null值和null键。

对于一个HashMap来说,它由若干个键值对组成,每一个键值对都由key和value两个部分组成。通过key找到对应的value是HashMap中最常见的操作之一,因此HashMap提供了get函数来实现这个功能。

下面是HashMap的get函数源码:

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;
}

get函数的参数是Object类型的key,返回值是value。它首先调用getNode函数,getNode函数的作用是获取hash值对应的Node节点。如果该节点存在,则判断key是否相同,如果相同则返回该节点的value;否则,遍历该节点的next链表,找到与key相同的节点并返回。如果最终还是没有找到,则返回null。

其中,getNode函数有一个关键的变量是table,它是一个Node类型的数组,存储HashMap的所有节点。通过hash值计算出Node在table数组中的位置,然后可以快速定位到对应节点,进而获取该节点储存的value。

总结:通过get函数可以获取指定key的value。其实现原理是hash值和数组的索引,通过算法定位到数组中的节点,判断key是否相等,最终获取value。这也是HashMap高效、查询速度快的原因之一。