我们都知道map数组的大小是2的冥次方
但是当我们用HashMap有参构造去自定义数组大小时,他是怎么把我们自定义的值转换为2的冥次方呢;
HashMap给我们一个TableSizeFor() 方法,我觉得这个方法很巧妙
他是用 按位或赋值操作符|=和位运算>>>来向上取2 的冥次方
static final int tableSizeFor(int cap) {
int n = cap - 1;
n |= n >>> 1;
n |= n >>> 2;
n |= n >>> 4;
n |= n >>> 8;
n |= n >>> 16;
return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
}