关于Hashmap扩容为什么都是二倍扩容,容量总为2的n次幂。

if ((p = tab[i = (n - 1) & hash]) == null)
            tab[i] = newNode(hash, key, value, null);

因为Hashmap计算存储位置时,使用了(n - 1) & hash。只有当容量n为2的幂次方,n-1的二进制会全为1,位运算时可以充分散列,避免不必要的哈希冲突,所以扩容必须2倍就是为了维持容量始终为2的幂次方。

猜你喜欢

转载自blog.csdn.net/qq_43518425/article/details/114379391