这个问题在这里已有答案:
/**
* The default initial capacity - MUST be a power of two.
*/
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;
类java.util.Map
有一个static
成员DEFAULT_INITIAL_CAPACITY
,它被赋予int
值,通过按位运算1<<4
计算,这意味着16
。
我的问题是他们为什么分配这样的价值。使用按位运算符而不是直接分配int
值来分配值有什么好处?
Javadoc说默认初始容量“必须是2的幂”。
通过将作业写为左移,它鼓励未来的开发人员问自己“为什么他们这样写呢?”因此,阅读评论,同时也使价值更容易被改变为两个不同的权力。
这是我的猜测:
java HashMap的容量总是被认为是2的幂(超出了本问题范围的原因)。因此,默认初始容量必须是2的幂。虽然16是2的幂,但是1 << 4清楚地向任何可能想要修改代码的人说明了这种限制。