Java集合HashMap的put操作

本文详细解析了Java中HashMap的实现原理,包括其默认负载因子、数组大小、扩容操作及put()方法的工作流程。同时,文章深入探讨了链表树化的过程,从节点转换到红黑树调整,再到根节点位置的确定。

Java中HashMap的实现并不是简单的开链法,而是在开链法的基础上加上了搜索树的方法。

默认负载因子:0.75  默认数组大小:16

上述两个参数都可以利用构造参数提供自定义的容量和负载因子,需要注意的是如果自定义容量,容量会提升到2的幂次,不一定是自定义的大小。

扩容操作: 数组扩展为原来的2倍的容量,原来位置的元素要么还在原来的位置,要么在2倍偏移的位置。

put()操作:利用hash找到应该放入数组的位置,如果该位置没有元素,则生成一个元素放入数组中。

                  元素存在的情况下:如果是树节点,按照树节点的插入方式插入,否则,按照链表方式将新节点放入到链表最后,判断                    是否需要转换成树,根据链表节点个数是否大于阈值。

                  判断是否需要扩容。根据HashMap中的元素个数是否大于阈值(此阈值是扩容阈值,是数组容量和负载因子的乘积)。

 

链表的树化操作:

1. 先将链表节点都变成树节点。

2. 按照红黑树的方式进行插入调整

3. 利用hash计算出的数组位置存放根节点,(树节点既能表示左右孩子,也能够表示链表的前一个节点,后一个节点),更改根节点在链表中的位置,调整到链表最前面。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值