HashMap原理

  1. hash 函数的实现
     
     在 get 和 put 的过程中,计算下标时,先对 hashCode 进行 hash 操作,然后再通过 hash 值进一步计算下标

     




  1. resize 的实现
    
     从 16 扩展为 32 时,具体的变化如下所示:

     
    
     因此元素在重新计算 hash 之后,因为 n 变为 2 倍,那么 n-1 的 mask 范围在高位多 1 bit (红色),因此新的 index 就会发生这样的变化:

     
      因此,在扩充 HashMap 的时候,不需要重新计算 hash,只需要看看原来的 hash 值新增的那个 bit 是 1 还是 0 就好了。
     是 0 的话索引没变,是 1 的话索引变成“原索引 + oldCap”。可以看看下图为 16 扩充为 32 的 resize 示意图:

     




  1. HashMap 的底层实现是   数组+链表
   
       










































































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值