首页 > 其他 > 详细

HashMap详解

时间:2021-04-02 22:03:24      阅读:27      评论:0      收藏:0      [点我收藏+]

1:为什么HashMap的容量必须是2的幂次方

DEFAULT_INITIAL_CAPACITY为素组bucket的长度,假如为16,现在有两个值计算出hash值,分别为17, 和34,如何放入bucket里面:我们的原则是尽量是放入的值不在同一个key上面,这样链表的长度就不会很长,方便查找。

首先想到的是算出的hash值和数组bucket的长度16进行取余计算, 17%16=1, 34%16=2,这样,这两个数值放在index为1以及index为2的地方,这样没问题。但是有一种更高效的方法,

17转为2进制为:10001, 34转为2进制为:100010,将他们与01111进行&预算:

            010001                       100010                

          &001111                        001111

结果:  000001                       000010

结果得到:17为1, 34为2,与%相同,但是&会比%高效很多。所以选择用&来对hash值进行计算。

再来看看01111是哪里来的,01111 = 10000-1, 而10000= 2的4次方,即上诉bucket的长度16.所有2的幂次方-1,最后几位都是1111,这样能最大程度保证hash &计算结果的分布均匀。

综上所述:HashMap的容量必须是2的幂次方,是因为参与hash &计算的值需要为:2的幂次方-1.

 

HashMap详解

原文:https://www.cnblogs.com/wnpp/p/14612279.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!