Java中HashMap桶内的键查找机制是怎样的?
Java中HashMap桶内的键查找机制是怎样的?
补充说明:正如评论区小伙伴提到的,咱今天聊的仅针对OpenJDK里HashMap的特定实现版本哈。
当你调用HashMap的get(Object key)方法时,我给你唠唠实际走的流程:
- 首先会先计算传入key的哈希值,不过不是直接用key的
hashCode()结果哦,还会经过HashMap内部的哈希扰动函数处理,目的是减少哈希冲突,更精准地定位到对应的桶(bucket)位置。 - 找到目标桶之后,先瞅一眼桶里的第一个节点:
- 如果这个节点的哈希值和key的哈希值完全匹配,并且key本身也相等(要么是同一个对象,要么调用
equals()返回true),那直接把这个节点的value返回给你就行。 - 如果第一个节点不对,再看这个桶的结构:
- 要是桶已经变成红黑树了(当桶里元素超过8个且数组长度大于64时会触发转换),就用红黑树的查找逻辑,快速定位到匹配的节点,返回对应的value。
- 要是还是链表结构,那就顺着链表一个节点一个节点比对,每个节点都检查哈希值和equals结果,找到匹配的就返回value。
- 如果这个节点的哈希值和key的哈希值完全匹配,并且key本身也相等(要么是同一个对象,要么调用
- 要是把整个桶都逛完了都没找到匹配的key,那只能返回null啦。
备注:内容来源于stack exchange,提问作者Sebastian
相关产品推荐
相关产品推荐

