HashMap的初始长度为16,其次在自动扩展或手动初始化时,长度必须是2的幂。
初始值选择16是为了服务从key映射到index的哈希值。
上篇文章提到过《初识HashMap(一)》,从Key映射到HashMap数组的对应位置,会用到一个Hash函数:
index = Hash("id")
如何实现一个尽量均匀分布的Hash函数呢?我们通过Key的HashCode值来做运算。
有人可能想到用取模的方式实现index = HashCode(Key) % Length ,原理是一样的,不过取模的执行效率太低,采用位运算。
<

HashMap的初始长度设为16,因2的幂特性确保通过Hash函数计算的index均匀分布。Key的HashCode与Length-1(全为1的二进制)做与运算,提高分布均匀性,降低冲突。若长度非2的幂,如10,冲突可能性增加,不利于均匀分布。
最低0.47元/天 解锁文章
3241

被折叠的 条评论
为什么被折叠?



