我们知道,在新建一个HashMap对象时,无论传的initialCapacity
参数值为多少,最总HashMap中数组的长度始终为2的n次方,代码如下:
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;}
>>>表示忽略符号右移,不足补0
假设cap的值为10,那么n的值为9,对应二进制值为1001 经过n |= n >>> 1;
计算,此时n对应的二进制值为1101 经过n |= n >>> 2;
计算,此时n对应的二进制值为1111 依次类推,最后n对应的二进制的值为1111,对应十进制为15 根据最后的三元运算,该方法的返回值为16,也就是2的4次方