HashMap中的put方法面试

仅适合看过源码的朋友们~~

首先关于这个put方法,通过源码分析我们可以发现,put方法传参是key,value。那么其实
里面有一个方法putVal(),hash就是低16位与高16位异或得到。

那么我们来看putVal,通过观察源码我们可以分析大概为四种情况:
1.slot为空 我们直接通过寻址算法(table.length - 1 & hash) 找到数组下标
然后newNode()包装完之后丢进下标就可以了
2.slot不为空的情况 还未被链化,需要对比一下,对比这个key和put进来的key是否一致,
如果一致的话就做一个替换操作,如果不一致的话就是一波hash冲突了,那么如果这种情况
的话,这种情况就用尾插的方式插入进链表里面去
3.这种情况就已经链化了,跟第二种情况相似,需要我们去进行对比一下,对比进来这个key
和put进来的key是否一致,一致的话就进行替换操作,如果不一致的话用尾插法的形式给它
插到链表尾部就好了,这个还没完,如果这个时候就要去比较树化阈值,如果达到这个树化
阈值的话,就需要调用这个树化方法,这个树化操作都在该方法里完成
4.就是很严重的情况了,那个链表已经转成红黑树了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值