判断一个元素是否是2的幂,这段代码也是Java HashMap中tableSizeFor方法的实现。
boolean check(long x) {
return getVal(x) == x;
}
//获取大于当前元素的最小的2的幂的元素
int getVal(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;
}