初始化
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`ω′)ノ