JDK的HashMap源码在rehash创建新的散列表的过程中,初始生成散列表的过程中需要计算最初的散列表的大小,用到了Integer.highestOneBit方法,
这个方法的作用是:对于一个输入的32位的整数,输出中只保留这个整数的最高位比特,其余的比特全部清零。
JDK的计算方法是:
public static int highestOneBit(int i) {
// HD, Figure 3-1
i |= (i >> 1);
i |= (i >> 2);
i |= (i >> 4);
i |= (i >> 8);
i |= (i >> 16);
return i - (i >>> 1);
}
性能应该是一个常量值,位移操作又比较省时间,效果应该很好,请问你还有更好的实现算法么?
比如二分查找法?