Java - HashMap扩容为什么选用2倍

2021-01-20 11:56:14 浏览数 (1)

  1. 做除余的时候2的倍数可以直接使用&进行快速计算

例如: 19可以写成19&(16-1),位运算更高效

  1. 扩容的时候只移动大约一半的数据,并且不会造成扩容之后碰撞更加严重的情况

例如: hash值为4和8的值存放在size为4的数组中,则两个元素都存放在0下标的数据中,当以2倍扩容时,size变为8,8依然存放在0下标位置上,而4移动到下标为4的位置上,这样不仅达到了扩容的效果,还减少了hash碰撞,一举两得。

0 人点赞