HashMap的数据存储结构

HashMap内部数据结构使用数组+链表+红黑树进行存储

 

  • 数组类型为Node[],每个Node都保存了某个KV键值对元素的key、value、hash、next等值。

  • 链表,它由一系列节点组成,每个节点包含两部分:数据和指向下一个节点的指针。

  • 当链表的长度超过8并且数组长度大于64时,为了避免查找搜索性能下降,该链表会转换成一个红黑树。

一、存储数据的过程put()

1、HashMap在存储数据时,会将key和value封装在一个Node[]

2、调用key的hashcode()方法获取key的哈希码

3、通过转换算法将其转换为数组的下标

4、当数组下标没有值,就直接将此Node[]放在这个下标

5、当数组下标下有值,就会将key和链表上的每一个值进行比较

6、如果equal()都返回false则将其加入链表最后

7、如果equal()和链表某个节点返回true则将其节点进行覆盖

二、取数据过程get()

1、根据key的值算出hashcode

2、通过转换算法将其转换为数组的下标

3、如果当前下标为null则直接返回空

4、如果当前下标是链表,会使用equal()方法和链表上的节点进行比较

5、如果都返回false则返回空

6、如果有一个节点为true则返回当前节点的值

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lcannal

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值