HashMap的get、put、resize过程

get

1、先计算出key对应的hash值
2、对超出数组范围的hash值进行处理
3、根据正确的hash值(下标值)找到所在的链表的头结点
4、遍历链表,如果key值相等,返回对应的value值,否则返回null

put

1、先计算出key对应的hash值
2、对超出数组范围的hash值进行处理
3、根据正确的hash值(下标值)找到所在的链表的头结点
4、如果头结点==null,直接将新结点赋值给数组的该位置
5、否则,遍历链表,找到key相等的节点,并进行value值的替换,返回旧的value值
6、如果没有找到,采用尾插法(1.8)/头插法(1.7)创建新结点并插入到链表中
7、将存储元素数量+1
8、校验是否需要扩容

resize

1、resize发生在table初始化, 或者table中的节点数超过threshold值的时候, threshold的值一般为负载因子乘以容量大小.
2、每次扩容都会新建一个table, 新建的table的大小为原大小的2倍.
3、扩容时,会将原table中的节点re-hash到新的table中, 但节点在新旧table中的位置存在一定联系: 要么下标相同, 要么相差一个原table的大小.
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值