关于hashMap利用hashCode数组定位indexFor的理解

来源:互联网 发布:程序员级别划分 编辑:程序博客网 时间:2024/05/18 01:11

关于hashMap利用hashCode数组定位indexFor的理解

读到hashMap原理的时候很难理解hashMap对底层数组定位的算法,

static int indexFor(int h, int length) {         return h & (length-1);     }  

因为length=2^n对应的二进制中只有一个位为1,如果直接计算h & length,那么只能得到两种结果(2^n或0),而length-1=2^n-1对应的二进制中末尾有n个位都是1。计算h &( length-1)其实等价于计算h%length,本质就是截取h的后n个二进制位,目的是将我们put进来的元素的key映射到HashMap底层数组对应的hash桶中,这里采用与运算比模运算的开销小得多,由于indexFor函数经常要使用,所以为了效率HashMap要求底层数组的length总是2的幂,这样就能用与运算代替模运算了。

原创粉丝点击