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;
}