Java 为什么HashMap(和其他类)的OpenJDK实现中的值是使用位移位初始化的?

Java 为什么HashMap(和其他类)的OpenJDK实现中的值是使用位移位初始化的?,java,Java,我在看OpenJDK时偶然发现了这行代码,其中设置了默认初始容量: static final int DEFAULT\u INITIAL\u CAPACITY=1因为有时更容易用位数而不是数字范围来推理。然而,在HashMap的情况下,另一个原因是您需要执行hash%numberofbucket,模运算非常昂贵,因此要加快运算速度,可以使用二的幂,然后模可以用逻辑AND替换-它也可以这样做,但仅适用于二的幂。数组的情况可能是类似的原因。“因为有时用位数而不是数字范围来推理更容易。”你能举个例子吗

我在看OpenJDK时偶然发现了这行代码,其中设置了默认初始容量:


static final int DEFAULT\u INITIAL\u CAPACITY=1因为有时更容易用位数而不是数字范围来推理。然而,在
HashMap
的情况下,另一个原因是您需要执行
hash%numberofbucket
,模运算非常昂贵,因此要加快运算速度,可以使用二的幂,然后模可以用逻辑AND替换-它也可以这样做,但仅适用于二的幂。
数组
的情况可能是类似的原因。

“因为有时用位数而不是数字范围来推理更容易。”你能举个例子吗?@tim kt任何真正的按位(比如位掩码)的东西,它们更容易理解(65536 vs
1)