JDK的 HashMap类中有点不解的地方

sea 发布于 2016/03/05 19:11
阅读 295
收藏 0

JDK的 HashMap类中有点不解的地方

/**
     * The default initial capacity - MUST be a power of two.
     */
    static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16

    /**
     * The maximum capacity, used if a higher value is implicitly specified
     * by either of the constructors with arguments.
     * MUST be a power of two <= 1<<30.
     */
    static final int MAXIMUM_CAPACITY = 1 << 30;



定义的静态常量,为什么不直赋值,而是搞个左移位赋值呢,比如

static final int DEFAULT_INITIAL_CAPACITY = 16;
不是更好吗,因为可以省下位算术左移操作





加载中
0
JYToscer
JYToscer
The default initial capacity - MUST be a power of two.
sea
sea
能再多说明 一下吗,就是搞不懂那啥意思
0
map150
map150
我个人认为这应该是为了强调容量一定是2的整数幂,同时也是和地下的MAXIMUM_CAPACITY 同一,如果直接表述称16的话,对于其他的维护者就可能认为这个16改成17或者其他非2的整数幂也是允许的
sea
sea
有道理
0
ShawnXiaFei
ShawnXiaFei

同意楼上的观点。有时候代码不仅仅只考虑效率问题,也还要考虑理解维护问题。另外,移位运算应算效率很高的运算了。

ShawnXiaFei
ShawnXiaFei
嗯嗯,这个是常量,应该是在编译过程中就替换为具体值了。 因为题主提到了效率问题,我才跟着说了下。
map150
map150
这个移位运算影响的应该只是编译的效率吧
返回顶部
顶部