HashMap jdk1.8 put get 操作步骤

本文详细介绍了HashMap在JDK1.8中的put操作步骤,包括数组扩容、哈希计算、节点插入等。get操作则通过哈希定位,对比首个元素并根据链表或红黑树结构进行查找。当链表长度超过8时,会转化为红黑树以优化性能。

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

put步骤总结如下:

  • ①. 判断键值对数组table[i]是否为空或为null,否则执行resize()进行扩容,初始容量是16;

  • ②. 根据键值key计算hash值得到插入的数组索引i,如果table[i]==null,直接新建节点添加,转向⑥,如果table[i]不为空,转向③;

  • ③. 判断table[i]的首个元素是否和key一样,如果相同直接覆盖value,否则转向④,这里的相同指的是hashCode以及equals;

  • ④. 判断table[i] 是否为TreeNode,即table[i] 是否是红黑树,如果是红黑树,遍历发现该key不存在  则直接在树中插入键值对;遍历发现key已经存在直接覆盖value即可;

  • ⑤. 如果table[i] 不是TreeNode则是链表节点,遍历发现该key不存在,则先添加在链表结尾, 判断链表长度是否大于8,大于8的话把链表转换为红黑树;遍历发现key已经存在直接覆盖value即可;

  • ⑥. 插入成功后,判断实际存在的键值对数量size是否超多了最大容量threshold,如果超过,进行扩容。

get步骤总结如下:

get()方法就相对简单了,通过hash定位桶,然后根据该桶的存储结构决定是遍历红黑树还是遍历链表。

1  table[i]的首个元素是否和key一样,如果相同则返回该value

2 如果不同,先判断首元素是否是红黑树节点,如果是则去红黑树中查找;反之去链

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

二十六画生的博客

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

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

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

打赏作者

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

抵扣说明:

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

余额充值