Java-- Map的4种遍历方式

Posted MinggeQingchun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java-- Map的4种遍历方式相关的知识,希望对你有一定的参考价值。

1、分别遍历 key 和 values

      for(String key:map.keySet())
            System.out.println(key);
        

        for(String value:map.values())
            System.out.println(value);
        

2、Iterator迭代器迭代

通过Set<Map.Entry<K,V>> entrySet()方法获取泛型对象为 Map.Entry<K,V> 的Set集合,然后使用Iterator迭代器遍历,每次取出 Map.Entry<K,V> 对象的 key和value

        Iterator<Map.Entry<String, String>> entries = map.entrySet().iterator();
        while(entries.hasNext())
            Map.Entry<String, String> entry = entries.next();
            String key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key+":"+value);
        

3、get方法获取

通过Set<K> keySet() 方法获取Map集合所有的key,然后通过key获取value

    Set<String> keySet = map.keySet();
        for (String key:keySet)
            System.out.println(key + ":" + map.get(key));
        

    或

    Set set = map.keySet();
        Iterator<String> it = set.iterator();
        while (it.hasNext())
            String key = it.next();
            System.out.println("Key:" + key + ";" + "Value:" + map.get(key));
        

相对来说通过Set<K> keySet() 方法效率更低,获取Map集合所有的key,然后通过key获取value,需要遍历Key获取值,本身就耗时 

注:

根据阿里开发手册,也不建议使用这种方法,因为会迭代两次。keySet获取Iterator一次,还要通过get又迭代一次,降低性能

4、Java8中Map接口中默认Lambda表达式

/**
     *
     * default void forEach(BiConsumer<? super K, ? super V> action)
     * BiConsumer 接口中方法:
     *      void accept(T t, U u); 对给定的参数执行操作
     */
        map.forEach((key,value) -> 
           System.out.println(key + ":" + value);
        );

总结:

1、entrySet的方式整体都是比keySet方式要高一些

2、单纯的获取key来说,两者的差别并不大,但是如果要获取value,还是entrySet的效率会更好,因为keySet需要从map中再次根据key获取value,而entrySet一次都全部获取出来

3、iterator的迭代器方式比foreach的效率高

注:

foreach的语法只是对iterator进行了简单的包装,使用起来更加方便而已,但是如果在foreach循环体内,对集合元素进行删除添加操作的时候,会报出ConcurrentModificationException,并报修改异常。如果需要在遍历集合的时候对象集合中元素进行删除操作,需要使用iterator的遍历方式,iterator自带的remove删除方式不会报出异常

以上是关于Java-- Map的4种遍历方式的主要内容,如果未能解决你的问题,请参考以下文章

遍历Map的几种方式

Java中如何遍历Map对象的4种方法

Java中如何遍历Map对象的4种方法

遍历Map的4种方法(来自网络)

map集合的4种遍历方式

Java中Map集合的三种遍历方式