使用 HashMap 时,有哪些提升性能的技巧?

大家好,我是鸭鸭!

此答案节选自鸭鸭最近弄的面试刷题神器,更多大厂常问面试题,可以点击进行阅读哈!

目前这个面试刷题小程序刚出,网页和小程序双端可以阅读!

回归面试题!

回答重点

1)合理设置初始容量:

如果在使用时可以预估 HashMap 存储的数据量大小,那么需要在创建时设置一个合适的初始容量,以避免频繁的扩容操作。

Java 中 HashMap 默认初始容量是 16。

2)调整负载因子:

官方提供的默认负载因子是 0.75。

可以根据具体应用场景调整这个值。较低的负载因子会减少冲突,提高查找效率,但会占用更多内存。较高的负载因子则会减少内存消耗,但可能增加冲突的概率,降低查找效率。

3)确保 hashCode 均匀分布:

对应 key 的 hashCode() 方法生成的哈希值需均匀分布,减少哈希冲突。避免使用质量不高的哈希函数,防止大量键映射到相同的槽位上,造成性能瓶颈。

扩展

HashMap 扩容机制的性能影响

扩容触发条件:

当 HashMap 中的元素数量超过容量 × 负载因子时,会触发扩容。扩容会将容量扩展为当前容量的两倍,并将所有键值对重新分配到新的桶(bucket)中。

性能影响:

扩容是一个耗时的操作,因为它需要重新计算每个键的哈希值,并将键值对重新分配到新的桶中。因此,频繁的扩容会显著影响性能,特别是在存储大量数据时。

其他优化

例如需要保留元素的插入顺序,则可以使用 LinkedHashMap替换 HashMap。它基于 HashMap 但维护了一个链表,记录元素的插入顺序。

这样就不需要我们从 HashMap 中获取数据,然后再排序。

如果是需要保留有序的键值对,则可以使用 TreeMap

如果是线程安全场景,则可以使用 ConcurrentHashMap

最后

最后再推荐下鸭鸭目前努力在做面试刷题神器,已经有近 5000 多道面试题目啦,欢迎大家来阅读!如果大家有不会的面试题,也可以在面试鸭内反馈!鸭鸭会第一时间为大家解答!

我是鸭鸭,我们下期见~

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值