关于HashMap负载因子问题

xoHome 发布于 2012/02/28 14:02
阅读 1K+
收藏 0

在HashMap类源码中,初始化和resize方法计算散列数组长度时,那个加载因子到底有什么用(或者有什么好处),我查阅相关文档都说是碰撞和容量占用虑的折中,问题是不用这个加载因子一样可控制容量大小呀。

table.length = 容量*加载因子,既然长度都是核算出来的,那直接传入table长度不就完了么? 干嘛还多个变量?不解!

以下是问题补充:

@xoHome:另外还有个问题,就是为什么容量必须是2的幂? (2012/02/28 14:19)
加载中
0
核桃博客
核桃博客

loadfactor默认0.75,就是说差不多快满(默认取3/4)的时候重新hash/resize,这样可以避免hashmap里面每个table元素上的链表长度过长,影响hashmap的效率;

后面那段你看错了

table.length=capacity;

threshhold=capacity*loadfactro

当然,如果需要深入理解,推荐深入看我博客上的系列文章,最近写了13篇,下面是第一篇

http://www.hetaoblog.com/%e8%af%b4%e4%b8%80%e8%af%b4java%e9%87%8c%e9%9d%a2%e7%9a%84hashcode-object-hashcode

当然,你也可以直接看hashmap那几篇

xoHome
xoHome
非常感谢,原来是这样
0
核桃博客
核桃博客

最近的文章对HashMap作了深入解读,后续还有几篇没写,欢迎对我的核桃博客保持关注,

或者你对HashMap有啥其他问题都可以发给我,我可以找个时间整理出来回答你

xoHome
xoHome
好的 呵呵
返回顶部
顶部