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); }
性能应该是一个常量值,位移操作又比较省时间,效果应该很好,请问你还有更好的实现算法么?
比如二分查找法?