我正在阅读Java 8 HashMap的实现细节,谁能告诉我为什么Java HashMap初始数组大小具体是16? 16岁有什么特别之处?为什么总是两个人的力量?谢谢
2 的幂之所以到处出现,是因为当用二进制表示数字时(就像在电路中一样),2 的幂的某些数学运算执行起来更简单、更快(只要想想 10 的幂的数学运算是多么容易)我们使用十进制)。例如,乘法在计算机中并不是一个非常有效的过程 - 电路使用的方法类似于将两个数字与多个数字相乘时所使用的方法。乘以或除以 2 的幂需要计算机将位向左移动以进行乘法或向右移动以进行除法。
至于为什么HashMap是16呢? 10 是动态增长结构(任意选择)的常用默认值,16 也相差不远 - 但它是 2 的幂。
您可以非常有效地计算 2 的幂的模数。n % d = n & (d-1)
当 d 是 2 的幂时,模数用于确定项目映射到内部数组中的哪个索引 - 这意味着它在 Java HashMap 中经常出现。模数需要除法,这也比使用除法效率低得多bitwise and
操作员。您可以通过阅读一本有关数字逻辑的书来说服自己这一点。
之所以bitwise and
对于 2 的幂以这种方式工作是因为 2 的每个幂都表示为设置为 1 的单个位。假设该位是 t。当你从 2 的幂中减去 1 时,你将 t 以下的每一位设置为 1,将 t(以及 t)以上的每一位设置为 0。Bitwise and
因此保存数字n中位置t以下的所有位的值(如上所述),并将其余的设置为0。
但这对我们有什么帮助呢?请记住,除以 10 的幂时,您可以计算 1 后面的 0 的数量,并从被除数的最低有效位开始获取该位数,以便找到余数。示例:637989 % 1000 = 989。类似的属性适用于只有一位设置为 1,其余设置为 0 的二进制数。示例:100101 % 001000 = 000101
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)