【HashMap】常用方法源码注释

本文深入探讨HashMap的内部机制,包括tableSizeFor()确保容量为2的幂次方以优化散列,hash()的扰动函数减少哈希冲突,以及put()、resize()、get()和removeNode()的关键实现。分析了扩容过程的细节,并展示了不同操作的源码解析,帮助理解HashMap的高效数据处理。
摘要由CSDN通过智能技术生成

保证2的幂次:tableSizeFor()

详见该文章
在这里插入图片描述

扰动函数:hash()

向HashMap中插入数据时,首先要将key的hashCode通过扰动函数得到一个hash属性,然后再用这个hash & (size-1)将key散列到桶中的某个下标处
在这里插入图片描述
之所以要h = key.hashCode()) ^ (h >>> 16)是因为如果当前桶经过扩容次数较少,在put时hash & (size-1),按位与时高位 hash 一直都是和0进行&运算,所以需要右移16位,使高位也参与到运算当中,使散列更加合理,减少哈希冲突次数

有关扰动函数和put时的与操作解析
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

put()

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

resize()

1、获取扩容后长度和阈值的过程

若第一次调用该方法,则为初始化;否则为扩容

下右图中通过resize()对HashMap进行初始化
在这里插入图片描述

下面的这部分代码思想就是为newCap和newThr设置值

在这里插入图片描述

2、扩容过程

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

get()

在这里插入图片描述
在这里插入图片描述

removeNode()

在这里插入图片描述

1、对应的两种封装

  1. 只需要匹配k(matchValue为false)

在这里插入图片描述

  1. k、v都要匹配(matchValue为true)

在这里插入图片描述

2、源码解析

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

replace()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

pascalzhli

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

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

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

打赏作者

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

抵扣说明:

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

余额充值