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高效、查询速度快的原因之一。
