为什么增大HashMap容器类里的加载因子 会增加查询数据的时间开销

当创建HashMap时,有一个默认的负载因子(loadfactor),其默认值为0.75,这是时间和空间成本上一种折衷:增大负载因子可以减少Hash表(就是那个Entry... 当创建 HashMap 时,有一个默认的负载因子(load factor),其默认值为 0.75,这是时间和空间成本上一种折衷:增大负载因子可以减少 Hash 表(就是那个 Entry 数组)所占用的内存空间,但会增加查询数据的时间开销,而查询是最频繁的的操作(HashMap 的 get() 与 put() 方法都要用到查询);减小负载因子会提高数据查询的性能,但会增加 Hash 表所占用的内存空间。

上面说的我不明白为什么增大加载因子 会增加查询数据时间的开销 求解
展开
 我来答
海妖大人
2014-03-18
知道答主
回答量:35
采纳率:0%
帮助的人:20.9万
展开全部
建议你查看一下散列表一些规则,负载因子表示散表的装满程度,如果是增大了负载因子的话,就代表这个散列表装的越满,这个越满代表了什么,代表了hash表的空间越少,所以往里面put或者get的时候经常会出现散列值的冲突问题,举个例子,在放数据的时候,如果求到了一个散列值了,准备放的时候,发现hash表在那个位置有数据了,那就得往后查找,如果找个空间很小,很可能之前就已经放过值了。。又得往后,是不是浪费时间,如果第一次放的时候就有足够的空位置呢?也就是说如果散列表够大,求出来的散列值不存在冲突,是不是可以直接放进去了?查找同理
fuhaiwei
推荐于2017-11-26 · TA获得超过3409个赞
知道大有可为答主
回答量:974
采纳率:75%
帮助的人:1387万
展开全部
我新建一个HashMap,初始容量为16。
我存入一个对象,则会先取其hashcode,
然后在把hashcode经过某种indexFor运算,得出0-15之间的一个数字。
例如我
存入Object1 存到下标0;
存入Object2 存到下标7;
存入Object3 存到下标4;
存入Object4 恰好也是7,怎么办呢,发生了碰撞?
Hashmap的做法是把Object2和4组成一个链表,然后在放在下标7的位置。

由此我们知道负载因子越大,发生碰撞的可能性越大。
我们知道hash操作和indexFor运算的速度都很快,
可是对于链表的查询(只能一个一个的比较)比Hash查询慢多了。

所以负载因子越大,则查询速度越慢。负载因子越小,则空间浪费越大。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式