这个是在我在面试中遇到的问题,是关于HashMap;个人学习笔记记录。
HashMap设置初始化容量20的具体流程:
答:是可以设置初始容量大小,设置为20,容量为32,2的n次方。
1、设置初始化容量为20
2.看源码
1.传参,调用有参构造方法
这个是源码英文解释 :
2.initialCapacity为20,loadFactor为0.75f
结果为默认的负载因子(loadFactor)0.75,HashMap所能容纳最大key-value键值对个数(threshold)
3.调用tableSizeFor方法,cap为20
运算:
int n = cap -1 = 20 - 1 = 19;
n |= n >>> 1 = n | n >>>1 = 19 | 19 >>> 1 ;
19的二进制为 1 0011,19 >>> 1 为1 0011右移一位,为1001(9)
| 运算规则(一个为真即为真)1|0 = 1 , 1|1 = 1 , 0|0 = 0 , 0|1 = 1
n 不小于0,走 n >= MAXIMUM_CAPACITY
1 << 30 为 2乘1073741824 很大的一个数字;但是 n 是小于这个数字的,走n+1 也就是31+1 =32。
当程序执行完毕,HashMap初始化的容量就为32。
参考链接:(14条消息) HashMap-1.8 之初始化容量与参数设置(源码分析)_唯荒的博客-CSDN博客_hashmap设置参数
Java &、&&、|、||、^、<<、>>、~、>>>等运算符 - 腾讯云开发者社区-腾讯云 (tencent.com)
(14条消息) java中 1<<30 什么意思 (转载)_墨笔夺魂的博客-CSDN博客_1 << java
总结:此文是作者原创;有任何不足,请指出修正,大家相互学习, 谢谢!
标签:初始化,20,HashMap,容量,19,设置 From: https://www.cnblogs.com/-3154/p/16787720.html