OpenJDK代码java.util.HashMap包括以下行:
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
Run Code Online (Sandbox Code Playgroud)
为什么1 << 4在这里使用,而不是16?我很好奇.
Boa*_*ann 22
需要强调的是,这个数字是2的幂,而不是完全随意的选择.因此,它推动开发人员尝试使用不同的数字将其更改为模式中的其他数字(例如,1 << 3或者1 << 5,而不是20),这样他们就不会破坏代码.有评论略高于:
/**
* The default initial capacity - MUST be a power of two.
*/
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
Run Code Online (Sandbox Code Playgroud)
任何容量java.util.HashMap都是2的幂.它是这样设计的,因为它允许使用快速按位AND操作将每个键的哈希码包装到表的容量范围内,正如您在访问表的方法中所看到的:
final Node<K,V> getNode(int hash, Object key) {
Node<K,V>[] tab; Node<K,V> first, e; int n; K k;
if ((tab = table) != null && (n = tab.length) > 0 &&
(first = tab[(n - 1) & hash]) != null) { /// <-- bitwise 'AND' here
...
Run Code Online (Sandbox Code Playgroud)
Sta*_*wed 10
我无法读懂开发人员的想法,但我们会这样做以表明数字之间的关系.
比较一下:
int day = 86400;
VS
int day = 60 * 60 * 24; // 86400
第二个例子清楚地显示了数字之间的关系,而Java足够聪明,可以将其编译为常量.
| 归档时间: |
|
| 查看次数: |
921 次 |
| 最近记录: |