hashmap源码tableSizeFor方法解释

it2025-08-21  5

1.源码部分

static final int tableSizeFor(int cap) { int n = cap - 1; n |= n >>> 1; n |= n >>> 2; n |= n >>> 4; n |= n >>> 8; n |= n >>> 16; return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1; }

2.分析

主要意思是获取到输入cap参数最接近的2的整数幂

例如输入15对应二进制数据为0111

1.步骤1 n=cap-1 //0110 左2为最高位1 2. n |= n>>>1 //无符号右移1位 并做位或运算 0011 |0110 =011x //这里能保证2 3 位为1 3. n|=n>>>2; 0001 |011x =0111 //到这里就能保证 234位都为1 之后的 4 8 16 也是如此 为了将int值32位全部走完 。。。。。 4.return时n+1即可获得最近的2的整数幂

参考链接:

HashMap中的位运算

最新回复(0)