解答
默认数组长度是 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 算法的结果就是均匀的。
帖子还没人回复快来抢沙发