• 前言

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