hashmap8底层源码剖析1--构造以及put

以下内容第一遍全按照记忆来,会有一些不太全的地方。

1.首先构造有两种:①带参数构造,如hashmap(10),此时底层会将输入的参数进行多次位运算(转换成后几位全是1的,比如111,1111),扩容的时候就在二进制转化为10进制的时候再加上1即可。也就是说,会就近返回一个2的次幂,这个才是数组的大小。比如说传入10,会返回16,传入15也是16,传入17会返回32。以此类推。注意:此时仅仅只是将改容量大小赋值给threshold,并没有创造数组,也就是说不管你传入几,我都先跟你存着,等你第一次put元素进去的时候我再给创建数组

                               ②无参构造,内部什么也不做,仅仅只是定义一个负载因子,这个因子等于0.75,为什么等于0.75,因为这是开发团队大量实验出来的结果,这个能保证数组得到充分的利用。

2.第二步put方法:

①如果原本没有值得话

步骤1:首先会用hash算法去取得key对象的hash值,也就是用对象的hashcode的高位和低位进行位运算(将整个hashcode右移16位,在和原值进行异或),这种算法能够让最终得到的hash值更加分散,当然这个算法也是大量实验得出来的。

步骤2:判断当前数组是否为null,或者长度为0,如果是,会立马给数组进行扩容,并且直接扩容为16

步骤3:用得到的hash值与n-1进行&操作,得到最后的位数的二进制编码值

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值