zoukankan      html  css  js  c++  java
  • HashMap中推荐使用entrySet方式遍历Map类集合KV而不是keySet方式遍历

    我们先来做一个测试

    public class HashMapTest {
        private HashMap<String, String> map = new HashMap<>();
    
        @Before
        public void beforeAllMethodTestInClass() {
            for (int i = 0; i < 100000; i++) {
                map.put("a" + i, "aa" + i);
                map.put("b" + i, "bb" + i);
                map.put("c" + i, "cc" + i);
                map.put("d" + i, "dd" + i);
            }
        }
    
        @Test
        public void entrySetTest() {
            Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
    
            long startTime = System.currentTimeMillis();
            while (it.hasNext()) {
                Map.Entry<String, String> entry = it.next();
                System.out.println(entry.getKey() + "=" + entry.getValue());
            }
            long endTime = System.currentTimeMillis();
            System.out.println(endTime - startTime);
        }
    
        @Test
        public void keySetTest() {
            Iterator<String> it = map.keySet().iterator();
    
            long startTime = System.currentTimeMillis();
            while (it.hasNext()) {
                String key = it.next();
                System.out.println(key + "=" + map.get(key));
            }
            long endTime = System.currentTimeMillis();
            System.out.println(endTime - startTime);
        }
    
    }
    多次测试,我们可以发现方法keySetTest()时间大约为2s809ms,
    entrySetTest()只有2s98ms,从测试上来说,后者运行时间小于前者。


    原来,因为entrySet遍历的时候,存放的是Map.Entry<T, T>类型,
    意思是,在进行遍历的时候已经把key、value放入其中。
    而keySet遍历的时候,存放的是T类型,
    意思是,在进行遍历的时候只放了key值,
    倘若我还需要value,就还需要使用 public V get(Object key) 方法

    注:本博客旨在记录,不作任何商用,如有侵犯,请联系博主(1258971228@qq.com)删除!

  • 相关阅读:
    10/11
    el表达式的坑
    在idea下两个项目之间的maven父子级项目依赖
    树上任意两点间距离
    优先级顺序
    HDU 6447
    KMP
    cf 1029 C
    牛客练习赛25
    莫比乌斯算法
  • 原文地址:https://www.cnblogs.com/uzxin/p/11857450.html
Copyright © 2011-2022 走看看