HashSet HashMap 性能比较(为什么HashMap更快)

本文揭示了HashSet较HashMap性能稍慢的原因,主要在于HashMap的键通常是简单类型(如String或Integer),其hashcode计算比复杂对象更快。当键对象相同时,两者性能相近;区别在于键的类型影响了计算效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看到这样一张对比表的时候,我是懵逼的,HashSet 的操作,基本上都是直接调用底层 HashMap 的相关方法来完成,怎么就轻描淡写地来了句 HashSet 较 HashMap 来说比较慢呢?

通过面向浏览器编程,可算找到了一个靠谱的解释。

它们都必须计算hashcode,但请考虑HashMap键的性质--它通常是一个简单的String,甚至是一个Integer。计算它的hashcode要比整个对象的默认hashcode计算快得多。如果HashMap的键与存储在HashSet中的键是同一个对象,那么在性能上就不会有真正的差别。区别在于HashMap的键是什么类型的对象。

参考与感谢

https://stackoverflow.com/questions/16278995/why-is-hashmap-faster-than-hashset

HashSetHashMap都是Java集合框架中的容器类,它们之间有一些区别。 HashSet是基于HashMap实现的,它只存储了key,并且key不会重复,使用HashSet可以达到去重的效果。在HashSet内部,它的元素是无序的,因为它是通过哈希算法来存储访问元素的。 而HashMap是一种键值对的映射表,它存储了keyvalue,key不会重复,而value可以重复。HashMap内部使用哈希表来存储访问元素,它根据key的哈希值来确定元素在哈希表中的位置。HashMap是无序的,因为它并不维护元素的插入顺序。 相比之下,LinkedHashMap也是基于HashMap实现的,它在HashMap的基础上维护了一个双向链表来记录元素的插入顺序。因此,LinkedHashMap可以保持元素的插入顺序,它是有序的。 总结起来,HashSet适用于需要去重的场景,HashMap适用于需要通过键值对来进行查找的场景,而LinkedHashMap适用于需要保持元素插入顺序的场景。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [HashMapHashSet](https://blog.csdn.net/m0_67683346/article/details/126068054)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [JavaHashSetHashMap的区别_动力节点Java学院整理](https://download.csdn.net/download/weixin_38732744/12781399)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值