说一说HashMap的长度为什么是2的幂次方

答:

HashMap长度为2的幂次方的原因是为了减少Hash碰撞,尽量使Hash算法的结果均匀。

首先看一下HashMap中putVal方法的源码

说一说HashMap的长度为什么是2的幂次方_第1张图片

 其中有个( n - 1) & hash的方法,那么这个方法是干什么的呢?

        HashMap为了存取高效,就要尽量减少碰撞,将数据分配均匀,那么如何分配均匀,此时主要靠将数据存入到那个链表中的算法,这个算法就是( n - 1) & hash。& 是按位与运算,是一个位运算,而在计算机中位运算的效率很高,这就是不用%运算的原因。

        按位与&的计算方式为当对应位置的数据都为1时,运算结果也为1。因此当HashMap的容量是2的幂次方时,( n - 1)的2进制都是111..11的形式,在与添加元素的hash值进行位运算时能够充分的散列,使添加的元素能均匀的分布在HashMap的每个位置上,减少hash碰撞。

你可能感兴趣的:(面试修炼,哈希算法,java)