jdk1.8版本,HashMap源码学习(1)——初始化方法

初始化

HashMap()

1:加载因子,就是一个float的数
2:默认加载因子的值,默认0.75f
注意:这个加载因子和hashmap的扩容有关
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

HashMap(int initialCapacity)

1:初始容量
2:默认加载因子的值,0.75f
就是调用HashMap(int initialCapacity, float loadFactor)嘛
在这里插入图片描述

HashMap(int initialCapacity, float loadFactor)

1:判断下初始容量有没有问题
2:判断下初始容量是不是大于 1 << 30(值就是2的30次方), 见下面一张图。
需要注意一下,int最大值为2^31 - 1,
3:判断初始加载因子是否正常
4:设置加载因子的值,同时设置临界值threshold的值***
*临界值
threshold
*标识当hashmap的大小大于等于临界值时将会扩容*

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
5:传进来cap(初始容量)
‘>>>’标识无符号右移,最后得到的值如果小于0就返回1,如果大于0又判断是否大于hashmap的默认最大值2^30.最后返回的值作为该容量和该加载因子对应临界值
比如当我初始值cap等于10时,计算可等返回值为16

注意该函数功能:该函数是获取大于或等于传入容量 initialCapacity 的2的整数次幂(网上参考的试了试好像还真是,具体请参考添加链接描述

qq截图这点不好,不能自定义序号,大概。/(ㄒoㄒ)/~~
在这里插入图片描述

HashMap(Map<? extends K, ? extends V> m)

1:设置默认的加载因子
2:把整个map添加到当前hashmap中
在这里插入图片描述
1:table保存的是HashMap中的数据。Node<K,V>[] table,node是HashMap内部自定义类
在对于table=null,一般在我们初始化hashmap时成立,进入计算临界值threshold的值
2:当table不为空,并且传进来的map的大小大于threshold时,扩容大小,这个else分支我估计应该是它自己内部使用的,毕竟我们使用时不会出现这种情况
3:循环添加值了,putVal方法就是put()中调用的方法
在这里插入图片描述在这里插入图片描述

总结

感觉虽然看懂了初始化在干什么,里面的源码都是什么意思,但是好像缺少了联系全局整个HashMap的感觉,大概就是不知道为什么要这样。可能需要我参考更多的源码啊,ε=( o`ω′)ノ

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值