Map集合的遍历及比较

36 阅读2分钟
  • 前言

在平时开发中,经常会遍历集合。三大集合List,Set,Map既可以使用Iterator迭代器遍历也可以使用高级for循环(for-each)遍历。下来我们主要来看看Map集合的遍历。

  • Map集合遍历方式
	//Map集合的遍历方式
	public static void main(String[] args) {

		Map<String,String> map = new HashMap<>();
		map.put("百度", "李彦宏");
		map.put("阿里巴巴", "马云");
		map.put("腾讯", "马化腾");
		map.put("小米", "雷军");
		
		//map集合的第一种遍历方式:先获取map集合所有的key
		for (String key : map.keySet()) {
			System.out.println("k=" + key + ",v=" + map.get(key));
		}
		
		System.out.println("------------------------");
		
		//map集合的第二种遍历方式:遍历Map集合的所有的value值
		for (String value : map.values()) {
			System.out.println("v=" + value);
		}
		
		System.out.println("------------------------");
		
		//Map集合的第三种遍历方式:直接遍历键值对
		for (Map.Entry<String, String> entry : map.entrySet()) {
			System.out.println("k=" + entry.getKey() + ",v=" + entry.getValue());
		}
	}
  • 遍历结果
/*
	k=小米,v=雷军
	k=阿里巴巴,v=马云
	k=腾讯,v=马化腾
	k=百度,v=李彦宏
	------------------------
	v=雷军
	v=马云
	v=马化腾
	v=李彦宏
	------------------------
	k=小米,v=雷军
	k=阿里巴巴,v=马云
	k=腾讯,v=马化腾
	k=百度,v=李彦宏
*/
  • Map集合的遍历分析

1、这里的遍历方式没有使用Iterator迭代器进行遍历,因为使用的高级for循环底层就是按照Iterator迭代器遍历的。当然这也是我们常用的遍历方式。

2、但是高级for循环是否能取代Iterator迭代器呢?答案是当然不能取代的,因为Iterator迭代器遍历中有对集合的操作的方法(iterator.remove()),如果不使用该迭代器的方法,操作集合会出现错误的。这个时候就只能使用Iterator迭代器遍历集合了。

3、三种遍历的方式有什么区别呢?显而易见我们看得出,第二种遍历方式只能遍历Map中值得集合,其他两个都能获取k-v。但是从性能来讲,第三种由于第一种,因为第三种只需要通过一次遍历就能获取到集合的键值对,而第一种显示遍历的k的集合,然后遍历获取v的集合,也就是说第一种方式总共遍历了两次集合,所以性能稍差。但是获取k和v比较任性。

  • 总结

遍历Map集合的时候,你会使用哪种遍历方式呢?没有特殊需求,我会使用第三种,你们怎么看?