校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > 数据结构 > 哈希Hash
题目

hashmap经典八股文(百度面试)

HashMap数组的默认初始长度是多少,为什么设定为这个长度?

解答

默认数组长度是 16,其实只要是 2 的次幂都行,至于为啥是 16 呢,这是个经验值问题,16 这个长度最为常用。

那为什么数组长度得是 2 的次幂呢?

首先,一般来说,我们常用的 Hash 函数是这样的:index = HashCode(key) % Length,

但是因为位运算的效率比较高嘛,所以 HashMap 就相应的改成了这样:index = HashCode(key) & (Length - 1)。

那么为了保证根据上述公式计算出来的 index 值是分布均匀的,我们就必须保证 Length 是 2 的次幂

解释:**2 的次幂,也就是 2 的 n 次方,它的二进制表示就是 1 后面跟着 n 个 0,那么 2 的 n 次方 - 1 的二进制表示就是 n 个 1。

          **而对于 & 操作来说,任何数与 1 做 & 操作的结果都是这个数本身。

也就是说,index 的结果等同于 HashCode(key) 后 n 位的值,只要 HashCode 本身是分布均匀的,那么我们这个 Hash 算法的结果就是均匀的。

C 0条回复 评论

帖子还没人回复快来抢沙发