为什么数字在HashMap.java类中硬编码为1<<<<<<<<< 4

时间:2017-11-20 06:23:50

标签: java hashmap open-source

我在this link查看了HashMap.java的源代码。

我遇到了几段这样的代码:

  

static final int DEFAULT_INITIAL_CAPACITY = 1<< 4; //又名16

  

static final int MAXIMUM_CAPACITY = 1<< 30;

我的问题是,如果这些值必须硬编码,为什么不对评估值进行硬编码而不是这些左移运算符呢?

3 个答案:

答案 0 :(得分:2)

要强调的是,它们是2的幂,必须是2的幂,并且是写2的幂的简单方法。

从Java 8上的源代码:

/**
 * 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;

答案 1 :(得分:1)

任何好的编译器都会在编译时评估这些表达式,这样的表达式更易于人们阅读和理解。

答案 2 :(得分:0)

在这种情况下向你展示2的力量。