写点什么

HashMap 加载因子为什么是 0.75?

用户头像
java_wxid
关注
发布于: 2021 年 03 月 30 日
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 时转红黑树。


发布于: 2021 年 03 月 30 日阅读数: 14
用户头像

java_wxid

关注

Java开发,CSDN博客专家,自媒体工作者。 2021.03.30 加入

我是廖志伟,一名java开发工程师,CSDN博客专家,多年一线研发经验,曾就职多家互联网公司,任Java开发工程师职位,参与多个千万级并发互联网产品研发,对大型分布式,高并发及微服务架构有非常深入研究。

评论

发布
暂无评论
HashMap加载因子为什么是0.75?