关闭

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

瞎溜达 1年前 ⋅ 147 阅读

为了让HashMap存取高效,减少碰撞,也就是要尽量把数据分配均匀。Hash值的范围-2147483648到2147483647,前后加起来大概40亿的映射空间,只要Hash函数映射比较均匀松散,一般应用是很难出现碰撞的。但问题是一个40亿长的数组,内存是放不下的。所以这个散列值是不能直接拿来用的。用之前还要先对数组的长度取模运算,得到的余数才能用来要存放的位置也就是对应的数组下标。这个数组下标的计算方法是“(n-1)&hash”,n代表数组长度。这也就解释了HashMap的长度为什么是2的幂次方。


全部评论: 0

    我有话说: