java
java bucket index
kimbs0301
2025. 3. 17. 22:37
value: 64, 128, 256, 512, 1024 ...
index: 0, 1, 2, 3, 4 ...
minBufferSize: 64
int index = (bufferSize <= minBufferSize) ? 0 : getIndex(bufferSize);
private int indexOffset;
...
indexOffset = getPowerOfTwo(minBufferSize);
...
private int getIndex(int value) {
if (value < 1)
value = minBufferSize;
if (!isPowerOfTwo(value)) {
value--;
value |= value >> 1;
value |= value >> 2;
value |= value >> 4;
value |= value >> 8;
value |= value >> 16;
value++;
}
return getPowerOfTwo(value) - indexOffset;
}
public static int getPowerOfTwo(int value) {
//if (value <= 0 || (value & (value - 1)) != 0) {
// return -1;
//}
return Integer.numberOfTrailingZeros(value);
}
public static boolean isPowerOfTwo(int number) {
return (number & (number - 1)) == 0;
}