HashMap底层数据结构详解(3大实现图解)

HashMap底层数据结构详解(3大实现图解)-mikechen

HashMap底层数据结构在Java面试经常被问到,下面我就图文结合来详解HashMap的底层数据结构@mikechen

HashMap是一种基于哈希表实现的数据结构,它的底层数据结构主要包括两个部分:数组和链表,以及红黑树。

HashMap底层数据结构

如下图所示:

HashMap底层数据结构详解(3大实现图解)-mikechen

HashMap底层数据结构主要包括三部分:数组、链表,以及红黑树三部分组成实现。

 

1.数组

HashMap内部维护了一个Entry数组,用于存储键值对,Entry是HashMap内部定义的一个私有类,包含了key和value两个属性。

如下所示:

 static class Node<K,V> implements Map.Entry<K,V> {
    final int hash;
    final K key;
    V value;
    Node<K,V> next;

}

数组的每个元素称为“桶”,每个桶可能存储一个或多个Entry对象。

 

2.链表

如果多个Entry对象的hash值相同,它们会被存储在同一个桶中,形成一个链表。

如下图所示:

HashMap底层数据结构详解(3大实现图解)-mikechen

 

3.红黑树

当同一个桶中的Entry数量达到一定阈值(默认为8),HashMap会将这个桶中的Entry转化为一棵红黑树。

如下图所示:

HashMap底层数据结构详解(3大实现图解)-mikechen

当链表中的Entry数量较少时,HashMap会将红黑树重新转换为链表。

这样设计的目的:这是为了提高查找效率,因为在红黑树中查找的时间复杂度为O(log n),而在链表中查找的时间复杂度为O(n)。

以上就是HashMap底层数据结构详解,更多HashMap请查看:HashMap底层实现原理(图文超详解)

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法