2019独角兽企业重金招聘Python工程师标准>>>
我们知道,在新建一个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次方