HashMap加载因子为什么是0.75?大了和小了会怎么样?

HashMap加载因子为什么是0.75?大了和小了会怎么样?

0.75是趋于内存和访问效率上折中取的,

负载因子的大小决定了HashMap的数据密度

负载因子越大数据密度越大,发生碰撞的几率越高,数组中的链表也容易越长, 这样的话造成查询和插入时的比较次数增多,性能会下降。

负载因子越小,越容易触发扩容,虽然数据密度也越小,发生碰撞几率小,数组中链表越短对于查询和插入时比较次数也会少一些,性能也会提高。但是扩容会影响性能,所以建议初始化预设给它大一点空间。

如何解决Hash碰撞?

1.开放定址法
开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入。

2.链地址法
将哈希表的每个单元作为链表的头结点,所有哈希地址为i的元素构成一个同义词链表。即发生冲突时就把该关键字链在以该单元为头节点的链表的尾部。

3.再哈希法
当哈希地址发生冲突用其他的函数计算另一个哈希函数地址,直到冲突不在产生为止。

4.建立公共溢出区
将哈希表分为基本表和溢出表两部分,发生冲突的元素都放在溢出表中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忧郁的叮当猫

Thanks♪(・ω・)ノ

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值