- 前言
在平时开发中,经常会遍历集合。三大集合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集合的时候,你会使用哪种遍历方式呢?没有特殊需求,我会使用第三种,你们怎么看?