HashMap的put底层原理

1:首先,将map中的key取出来计算出他的hashcode

2:将改hashcode>>>16右移16位得出后再将这个右移后的值与原本的hashcode经行异或运算(为了将key的高16位和低16位都参与到了hash值的计算中,从而减少哈希冲突的可能性,提高HashMap的性能。)

3:上一步异或运算后得到的新的HashCode值再与(n-1)按位与运算后得到的值就是key所在的索引位置。(为了保证key的索引位置在HashMap的容量范围内,同时也可以减少哈希冲突的可能性,提高HashMap的性能。)

  • 16
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
HashMap的put操作用于向HashMap中插入键值对。其底层实现原理主要包括以下几个关键步骤: 1. 计算键的哈希值:首先,对于给定的键,HashMap会调用其hashCode()方法计算出对应的哈希值。哈希值是一个整数,用于确定该键值对应的存储位置。 2. 计算桶索引:根据哈希值和当前数组容量,通过位运算得到键值对应的桶索引。具体计算方式是:(n - 1) & hash,其中n为数组容量。 3. 查找桶:根据计算得到的桶索引,HashMap会定位到对应的桶位置。 4. 插入或更新:在对应的桶中进行插入或更新操作。如果桶中已经存在其他键值对,HashMap会遍历链表或红黑树(如果已经转换为红黑树)进行查找。如果找到具有相同键的节点,则更新其对应的值;如果没有找到,则将新的键值对插入到链表或红黑树的末尾。 5. 判断是否需要扩容:在插入或更新操作后,HashMap会判断当前元素个数是否超过负载因子与数组容量的乘积。如果超过,则触发扩容操作。 6. 扩容:扩容操作会创建一个新的数组,并将原有的键值对重新计算哈希值后放入新数组中。扩容操作会涉及到数组的重新分配和重新计算哈希值,以保持较低的散列冲突概率。 通过这些步骤,HashMap的put操作可以高效地将键值对插入到HashMap中。需要注意的是,如果键已经存在,则会更新对应的值;如果键不存在,则会将新的键值对插入到HashMap中。同时,HashMap还会根据负载因子进行自动扩容,以保证较低的散列冲突概率和高效的操作性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

water-之

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

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

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

打赏作者

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

抵扣说明:

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

余额充值