HashMap四种遍历方式及性能比较

本文介绍了HashMap的四种遍历方式:通过entrySet的迭代器、foreach增强循环、keySet的迭代器和foreach增强循环,并对比了它们在不同场景下的性能。在大量数据情况下,entrySet在需要取值时表现优于keySet,因为keySet需通过get方法取值,增加了额外开销。建议根据需求选择合适的方法:需要key-value对时使用entrySet,仅需key时使用keySet,推荐使用foreach增强循环以简化代码。

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

HashMap<Integer,String> map = new HashMap<>();
(1)
/*显式调用map.entrySet()集合迭代器*/
Iterator iter1 = map.entrySet().iterator();
while(iter1.hasNext())
{
Entry entry = (Entry) iter1.next();
Object a = entry.getKey();
Object b = entry.getValue();
}
(2)
/*foreach增强for循环实现entrySet*/
for (Entry<Integer, String> str : map.entrySet()) {
int a = str.getKey();
String b = str.getValue();
}
(3)
/*显式调用map.keySet()集合迭代器*/
Iterator iter2 = map.keySet().iterator();
while(iter2.hasNext())
{
String c = map.get(iter2.next());
}
(4)
/*foreach增强for循环实现keySet*/
for (Integer str : map.keySet()) {
String c = map.get(str);
}
经过运行多次发现,显式调用map.entrySet()集合迭代器与foreach增强for循环时耗几乎差不多,而当map容量较大时(比如千万级别)(1)、(2)和(3)、(4)对比会发现,entrySet会比keySet快不少,经过思考发现,如果纯粹遍历不去取值的话,两者性能几乎相同(查看底层源码,会发现只是返回值不同,父类相同,所以性能相差不多),而相差的时耗在于要取值的一步(很多人在这里理解为keySet方式遍历了两次),keySet会通过get方法(查看源码发现get的时间复杂度取决于for循环的次数,也可以量化为map容量大小)而entrySet则不需要,所以我们可以这样去使用:
(1)当需要key也需要value时,毫不犹豫选择entrySet,
(2)当只是遍历key而无需取value的话,使用keySet即可。
(3)foreach更简洁,推荐使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值