一个有意思的小算法
今天看ArrayDeque的实现细节,发现一个有意思的辅助函数,用来计算比n大的最小的2的幂次,大致逻辑是这样的
private static int calculateSize(int n) { // n >= 0
n |= (n >>> 1);
n |= (n >>> 2);
n |= (n >>> 4);
n |= (n >>> 8);
n |= (n >>> 16);
n++;
if (n < 0) // Too many elements, must back off
n >>>= 1;// Good luck allocating 2 ^ 30 elements
return n;
}
似乎是一个广为人知的算法: https://stackoverflow.com/a/365068/5637606