static final int MAXIMUM_CAPACITY = 1 << 30;
static final int tableSizeFor(int cap) {
// 0000 1000 0000 0000 0000 0000 0000 0000 n
// 0000 0100 0000 0000 0000 0000 0000 0000 n>>>1
//->0000 1100 0000 0000 0000 0000 0000 0000 相或结果:延伸1个1
// 0000 0011 0000 0000 0000 0000 0000 0000 n>>>2
//->0000 1111 0000 0000 0000 0000 0000 0000 相或结果:延伸2个1
// 0000 0000 1111 0000 0000 0000 0000 0000 n>>>4
//->0000 1111 1111 0000 0000 0000 0000 0000 相或结果:延伸4个1
// 0000 0000 0000 1111 1111 0000 0000 0000 n>>>8
//->0000 1111 1111 1111 1111 0000 0000 0000 相或结果:延伸8个1
// 0000 0000 0000 0000 0000 1111 1111 1111 n>>>16
//->0000 1111 1111 1111 1111 1111 1111 1111 相或结果:剩余低位都变成了1
int n = cap - 1;
n |= n >>> 1; //延伸1 个1
n |= n >>> 2; //延伸2 个1
n |= n >>> 4; //延伸4 个1
n |= n >>> 8; //延伸8 个1
n |= n >>> 16;//延伸16个1
//最后加一: //->0001 0000 0000 0000 0000 0000 0000 0000 得到二的整数幂
return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
}