HashMap 加载因子为什么是 0.75?
如果加载因子比较大,扩容发生的频率比较低,浪费的空间比较小,发生 hash 冲突的几率比较大。比如,加载因子是 1 的时候,hashmap 长度为 128,实际存储元素的数量在 64 至 128 之间时间段比较多,这个时间段发生 hash 冲突比较多,造成数组中其中一条链表比较长,会影响性能。
如果加载因子比较小,扩容发生的频率比较高,浪费的空间比较多,发生 hash 冲突的几率比较小。比如,加载因子是 0.5 的时候,hashmap 长度为 128,当数量达到 65 的时候会触发扩容,扩容后为原理的 256,256 里面只存储了 65 个浪费了。
综合了一下,取了一个平均数 0.75 作为加载因子。当负载因子为 0.75,时代入到泊松分布公式,计算出来长度为 8 时,概率=0.00000006,概率很小了,链表长度为 8 时转红黑树。
版权声明: 本文为 InfoQ 作者【java_wxid】的原创文章。
原文链接:【http://xie.infoq.cn/article/59e6f68e0e1a5614fe8e4dbe4】。文章转载请联系作者。
评论