HashMap的put方法源码流程理解

几个常量:

数组的默认大小16、扩容因子0.75、所以第一个扩容临界节点个数12、链表上限8,大于8链表转化为红黑树,但有一个前提,此时整个数据结构中的节点数要大于64,如果小于64,链表的长度为8时,将进行扩容、红黑树中的阶段个数如果小于6将红黑树转化为链表。

节点node<k,v>中的内容

Hash值:代表存储在数组中的那一个位置
Key,value
Node<k,v> next;链表结构中的下一个节点。

Hash()函数:

使用int接收hash,是key.hashcode()的高16位于低16位异或操作。所以Hash值32位。

几个变量:

Node<k,v>[] table; 数组表
Int size; 当前的节点使用个数
Int threshold; 当前扩容节点数阈值 第一次为12

Put()方法:

本质调用putVal(key.hash(),key,value,…);方法
第一次调用put方法时,
1.首先会调用resize()方法进行初始化。
初始化后,threshold = 12;table表的长度为16.
2.然后计算插入的位置计算
计算位置(数组下标)方法: (n-1)&hash 将坐标控制在15之内(意思是15位之前都是0)
3.插入节点
new一个

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HashMap的put方法是用来向HashMap中插入键值对的方法。在put方法中,首先会根据键的hash值计算出该键值对在数组中的索引位置。然后,会创建一个新的Node节点来存储该键值对的信息,包括键、值以及其他相关信息。接下来,如果该索引位置已经存在节点,则会执行替换操作;如果该索引位置为空,则直接将新节点插入该位置。在插入节点的过程中,如果链表长度大于等于7并且Node数组长度大于64,则会将该链表转变成红黑树,以提高插入和查找效率。总之,HashMap的put方法是通过计算hash值来确定键值对在数组中的位置,并使用链表或者红黑树来解决hash冲突问题,并最终将键值对插入到相应位置的方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [HashMap之put方法详解](https://blog.csdn.net/qq_43112598/article/details/106426120)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [HashMap put方法源码分析](https://download.csdn.net/download/weixin_38729607/13751823)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值