为什么使用按位运算符而不是直接int值分配HashMap的默认初始容量?

时间:2016-06-26 09:17:04

标签: java bitwise-operators

    /**
     * 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值有什么好处?

2 个答案:

答案 0 :(得分:3)

Javadoc说默认的初始容量&#34;必须是两个&#34;的幂。

通过将作业写成左移,它鼓励未来的开发人员问自己&#34;为什么他们这样写呢?&#34;因此,阅读评论,同时也使得更容易将值更改为不同的2的幂。

答案 1 :(得分:2)

这是我的猜测:

java HashMap的容量总是应该是2的幂(超出本问题范围的原因)。因此,默认初始容量必须是2的幂。 16是2的幂,1&lt;&lt;图4清楚地向可能想要修改代码的任何人说明了这一限制。