Java遍历HashMap的四种方式比较

本文介绍了Java遍历HashMap的四种方式,包括使用entrySet()、keyset()、迭代器和for-each循环,并对比了它们的性能和适用场景。推荐在需要遍历key和value时使用entrySet(),因为它在多数情况下具有更好的性能。对于只遍历键或值的情况,keySet()和values()更合适。在需要删除元素时,应使用迭代器的remove()方法,因为for和foreach不支持。
摘要由CSDN通过智能技术生成

key和value值都需要的三种遍历方法:

方法一:使用entryset()(推荐)

 Map<Integer, Integer> map = new HashMap<Integer, Integer>();
 for (Map.Entry<Integer, Integer> entry : map.entrySet())
 {  
       System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
 }  

方法二:使用keyset()通过键找值方式遍历

Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (String key : map.keySet()) {
   System.out.println("key= "+ key + " and value= " + map.get(key));
}

这个代码看上去比方法一更加干净,但实际上它相当慢且无效率。因为多了一步从键取值,更加耗时。(也是网上说的最多的二次取值方式)


与方法一相比,在不同的Map实现中该方法慢了20%~200%)。


具体的比较可以参考:entryset()和keyset()遍历的时间比较


总结:同时遍历key和value时,keySet()与entrySet()方法的性能差异取决于key的具体情况,如复杂度(复杂对象)、离散度、冲突率等,换言之,取决于HashMap查找value的开销。entrySet()一次性取出所有key和value的操作是有性能开销的,当这个损失小于HashMap查找value的开销时,entrySet()的性能优势就会体现出来。比如当key是最简单的数值字符串时,keySet()可能反而会更高效,耗时比entrySet

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值