为什么是1 << 30因为2个因素造成的。
- 正如上楼的 MrAmity 所说,HashMap在确定数组下标Index的时候,采用的是( length-1) & hash的方式,只有当length为2的指数幂的时候才能较均匀的分布元素
。所以HashMap规定了其容量必须是2的n次方
2.由于HashMap规定了其容量是2的n次方,所以我们采用位运算<<来控制HashMap的大小。使用位运算同时还提高了Java的处理速度。
HashMap内部由Entry[]数组构成,Java的数组下标是由Int表示的。所以对于HashMap来说其最大的容量应该是不超过int最大值的一个2的指数幂,
而最接近int最大值的2个指数幂用位运算符表示就是 1 << 30
HashMap为了保证元素均匀分布,其容量必须是2的幂次方,并使用(length-1)&hash计算数组下标。最大容量受限于Int的最大值,最接近的2的指数幂是1<<30,这同时也优化了处理速度。
1838

被折叠的 条评论
为什么被折叠?



