HashMap MAXIMUM_CAPACITY 为什么设置成1 << 30

正在学习hashmap,发现他的最大扩容数量是 1 << 30
但是为什么设置为这个呢。
请大牛指点

因为hashmap中定位位置用的是hash&(length-1),只有数组长度为2的n次,hash%length=hash&(length-1)
,2的n次-1的二进制表示刚好全为1,这样&运算能分布均匀,不然如果有一位是0,那么与运算结果对应的这一位也永远是0,那就对应的数组
为空,分布不均匀了

我觉得楼主你采纳的有问题。把上面2个答案结合起来会好一点。为什么是1 << 30因为2个因素造成的。
1. 正如上楼的 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

就是表示一个很大的数字,int一般都不会超过的
int总共4字节,最高位是符号位,如果写成(1<<31)就变成负数了
如果你无聊的话,可以定义成0x7fffffff,这个是int能表示的最大数字

基础知识还是要了解一下吧