zoukankan      html  css  js  c++  java
  • Java遍历Set,Map的几种方式

    Map的四种遍历方法

    public static void main(String[] args) {
            // 循环遍历Map的4中方法
            Map<Integer, Integer> map = new HashMap<Integer, Integer>();
            map.put(1, 2);
            // 1. entrySet遍历,在键和值都需要时使用(最常用)
            for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
                System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());
            }
            // 2. 通过keySet或values来实现遍历,性能略低于第一种方式
            // 遍历map中的键
            for (Integer key : map.keySet()) {
                System.out.println("key = " + key);
            }
            // 遍历map中的值
            for (Integer value : map.values()) {
                System.out.println("key = " + value);
            }
            // 3. 使用Iterator遍历
            Iterator<Map.Entry<Integer, Integer>> it = map.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry<Integer, Integer> entry = it.next();
                System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());
            }
    
            // 4. java8 Lambda
            // java8提供了Lambda表达式支持,语法看起来更简洁,可以同时拿到key和value,
            // 不过,经测试,性能低于entrySet,所以更推荐用entrySet的方式
            map.forEach((key, value) -> {
                System.out.println(key + ":" + value);
            });
            
        }
    

    如果只是获取key,或者value,推荐使用keySet或者values方式;

    如果同时需要key和value推荐使用entrySet;

    如果需要在遍历过程中删除元素推荐使用Iterator;

    如果需要在遍历过程中增加元素,可以新建一个临时map存放新增的元素,等遍历完毕,再把临时map放到原来的map中。

    Set的遍历

    1、迭代器方法

        /**
         * 1 iterator
         * 迭代器
         * @param set
         */
        public static void iteratorTest(Set<Integer> set) {
            long before = System.currentTimeMillis();
            for (Iterator<Integer> iterator = set.iterator(); iterator.hasNext(); ) {
                iterator.next();
            }
            long after = System.currentTimeMillis();
            System.out.println("set.iterator() for time=	"  + (after - before));
    
            before = System.currentTimeMillis();
            /**
             * while 循环写法
             */
            Iterator<Integer> iterator = set.iterator();
            while (iterator.hasNext()) {
                iterator.next();
            }
            after = System.currentTimeMillis();
            System.out.println("set.iterator() while time=	"  + (after - before));
        }
    
    

    2、增强for

        /**
         * 2
         * 增强for
         * @param set
         */
        public static void forBoostTest(Set<Integer> set) {
            long before = System.currentTimeMillis();
            for (int item : set) {
                // System.out.println(item);
            }
            long after = System.currentTimeMillis();
            System.out.println("set.for Boost time=	"  + (after - before));
        }
    
    

    3、set.forEach 注意:java8 才支持

        /**
         * 3 foreach
         * foreach 最慢不推荐 java8 lambda
         * @param set
         */
        public static void forEachTest(Set<Integer> set) {
            long before = System.currentTimeMillis();
            set.forEach(item -> {
                // System.out.println(item);
            });
            long after = System.currentTimeMillis();
            System.out.println("set.forEach time=	"  + (after - before));
        }
    
    

    4、set.stream().forEach 注意:java8 才支持

        /**
         * 4 stream foreach
         * stream foreach java8 特有
         * @param set
         */
        public static void streamForEachTest(Set<Integer> set) {
            long before = System.currentTimeMillis();
            set.stream().forEach(item -> {
                // System.out.println(item);
            });
            long after = System.currentTimeMillis();
            System.out.println("set.stream().forEach() time=	"  + (after - before));
        }
    
    
  • 相关阅读:
    归并排序(Merge Sort)
    AtCoder AGC035D Add and Remove (状压DP)
    AtCoder AGC034D Manhattan Max Matching (费用流)
    AtCoder AGC033F Adding Edges (图论)
    AtCoder AGC031F Walk on Graph (图论、数论)
    AtCoder AGC031E Snuke the Phantom Thief (费用流)
    AtCoder AGC029F Construction of a Tree (二分图匹配)
    AtCoder AGC029E Wandering TKHS
    AtCoder AGC039F Min Product Sum (容斥原理、组合计数、DP)
    AtCoder AGC035E Develop (DP、图论、计数)
  • 原文地址:https://www.cnblogs.com/chenxiaoge/p/13335454.html
Copyright © 2011-2022 走看看