【发布时间】:2017-11-20 06:23:50
【问题描述】:
我在this link查看HashMap.java的源代码。
我遇到了几段这样的代码:
静态最终int DEFAULT_INITIAL_CAPACITY = 1
和
静态最终 int MAXIMUM_CAPACITY = 1
我的问题是,如果这些值必须被硬编码,为什么不硬编码评估值而不是这些左移运算符?
【问题讨论】:
标签: java hashmap open-source
我在this link查看HashMap.java的源代码。
我遇到了几段这样的代码:
静态最终int DEFAULT_INITIAL_CAPACITY = 1
和
静态最终 int MAXIMUM_CAPACITY = 1
我的问题是,如果这些值必须被硬编码,为什么不硬编码评估值而不是这些左移运算符?
【问题讨论】:
标签: java hashmap open-source
这是为了强调它们是 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;
【讨论】:
任何好的编译器都会在编译时评估这些表达式,这样的表达式更易于人类阅读和理解。
【讨论】:
在这种情况下向您展示 2 的哪个幂。
【讨论】: