Dhr*_*Pal 1 java hashmap bit-shift bitwise-operators
我正在浏览源代码HashMap.我看到了一些
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16.我想知道为什么他们使用移位操作符的东西.这会加快计算速度吗?所以我寻找byte这三个操作之间的差异:
int DEFAULT_INITIAL_CAPACITY = 0x10;
L0
LINENUMBER 52 L0
BIPUSH 16
ISTORE 1
int DEFAULT_INITIAL_CAPACITY1 = 1 << 4;
L1
LINENUMBER 54 L1
BIPUSH 16
ISTORE 2
int test = 16;
L2
LINENUMBER 56 L2
BIPUSH 16
ISTORE 3
Run Code Online (Sandbox Code Playgroud)
这个值如何初始化是否重要?
信不信由你,它实际上是关于可读性.表达式1 << 4肯定不会比表达式更快地评估16.另外,无论表达式是什么,它都在编译时进行评估.
使用移位表示的关键是它是表达圆二进制数的更自然的方式.初始容量的不变量以及哈希表实现中的许多其他东西,它必须是纯粹的2的幂.这与表达式1 << n(相当于2 n)比十进制表示更直接地传达,特别是当您进入更高的值n(例如,高于16的任何值)时.
如您自己所知,字节码对于常量16或1 << 4是相同的。在这种特殊情况下,我认为这只是可读性问题:强调初始容量应为2的幂(将1转换为左边您只能获得2的幂。这是我在HashMap的资源中所拥有的:
/**
* 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)
| 归档时间: |
|
| 查看次数: |
404 次 |
| 最近记录: |