为什么HashMap建议初始化容量,且容量为2的次幂?
Posted akaneblog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么HashMap建议初始化容量,且容量为2的次幂?相关的知识,希望对你有一定的参考价值。
HashMap有扩容机制,就是当达到扩容条件时会进行扩容。HashMap的扩容条件就是当HashMap中的元素个数(size)超过临界值(threshold)时就会自动扩容。在HashMap中,threshold = loadFactor * capacity
。
每次扩容会重建hash表,导致性能下降。
默认情况下,当我们设置HashMap的初始化容量时,实际上HashMap会采用第一个大于该数值的2的幂作为初始化容量。
计算hashMap容量的阈值:
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,右边补0
>>右边移/2,左边补符号位,符号位是0就补0,是1就补1
>>>无符号右移,全补0
以上是关于为什么HashMap建议初始化容量,且容量为2的次幂?的主要内容,如果未能解决你的问题,请参考以下文章
阿里《JAVA开发手册》为什么建议设置HashMap的初始容量,设置多少合适