共同学习Java源代码-数据结构-HashMap(一)

本文深入解析了HashMap的数据结构,介绍了其基本管理机制,包括数组、桶(bin)、链表及红黑树等核心概念。文章详细说明了HashMap的存储原理,并列举了关键数值参数如初始容量、最大容量、链表转红黑树的阈值等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看源码之前,先来说一下HashMap的基本管理,这个类比较复杂。

HashMap的底层是个数组,数组的每个元素称为桶(bin),桶里存着的是链表或红黑树,最初默认是存链表,如果链表长度超过一定值,就会转换成红黑树,这就是HashMap的存储原理。


列出几个关键数值

1.哈希桶初始容量为16 

2.一个HashMap容纳的最多键值对数目为2的30次方

3.每个哈希桶对应的链表长度超过8个 该链表会转换成树

4.如果一个哈希桶元素对应的是树 这棵树节点数目小于6 这棵树会转换成链表

5.任意一个桶的链表想要转换成树 整个哈希桶数组的长度不能小于64 如果一个桶的链表要转换成树 但整个哈希桶数组的长度没有达到64 先将哈希桶数组扩容至64个元素容量


public class HashMap<K,V> extends AbstractMap<K,V>
    implements Map<K,V>, Cloneable, Serializable

这个类继承自AbstractMap,实现了Map接口,Cloneable接口和Serializable接口。


static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;

这个成员变量是初始数组长度,也就是16。


static final int MAXIMUM_CAPACITY = 1 << 30;

这个成员变量是最大数组长度,也就是2的30次方。


static final float DEFAULT_LOAD_FACTOR = 0.75f;

这个是载荷,以后会解释,默认0.75。


static final int TREEIFY_THRESHOLD = 8;

这个是将桶中的链表转换为红黑树的条件,也就是链表的长度大于8,就会被转换成红黑树。


static final int UNTREEIFY_THRESHOLD = 6;

这个就是将红黑树还原成链表的条件,也就是红黑树元素数为6以下时,就会被转换成链表。


static final int MIN_TREEIFY_CAPACITY = 64;

这个是将底层数组转换成红黑树的条件,如果数组元素多于64,那么底层数组将转换成红黑树。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值