zoukankan      html  css  js  c++  java
  • JAVA

    1.使用for_each循环迭代

    public class TestUnit {
        public static void main(String[] args) {
            HashMap hashMap=new HashMap<Integer,String>();
    
            hashMap.put(1,"aaa");
            hashMap.put(2,"bbb");
            hashMap.put(3,"ccc");
    
            for(Object m:hashMap.entrySet()) {
                Map.Entry mapEntry=(Map.Entry)m;
                Object key=mapEntry.getKey();
                Object value=mapEntry.getValue();
                System.out.println("key="+key+",value="+value);
            }
        }
    }

    2.通过构造HashMap的entrySet来迭代

    Iterator iter=hashMap.entrySet().iterator();
    while(iter.hasNext()){
        Map.Entry mapEntry=(Map.Entry) iter.next();
        Object key=mapEntry.getKey();
        Object value=mapEntry.getValue();
        System.out.println("key="+key+",value="+value);
    }

    3.先取得HashMap的keySet,再用get(key)访问

    Set set=hashMap.keySet();
    Iterator iter=set.iterator();
    while(iter.hasNext()){
        Object key=iter.next();
        Object value=hashMap.get(key);
        System.out.println("key="+key+",value="+value);
    }

    Test

    据说是用entrySet更快一点,写段代码测试了一下,确实如此。(纠正:后来发现测试存在问题,谁先执行谁的耗时要多一点,估计是和第一个需要开辟输出缓冲区有关

    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    
    public class TestUnit {
    
        public static void main(String[] args) {
            HashMap<Integer, String> hashMap = new HashMap();
            for (int i = 0; i < 10000; i++) {
                hashMap.put(i, "Hello World!");
            }
            forEachTest(hashMap);
            entrySetTest(hashMap);
            keySetTest(hashMap);
        }
    
        static long forEachTest(Map map){
            long startTime =  System.currentTimeMillis();
    
            for(Object m:map.entrySet()) {
                Map.Entry mapEntry=(Map.Entry)m;
                System.out.print(mapEntry.getValue());
            }
    
            long endTime =  System.currentTimeMillis();
            System.out.println("
    forEachTest : " + (endTime - startTime));
            return endTime - startTime;
        }
    
        static long keySetTest(Map map) {
            long startTime =  System.currentTimeMillis();
    
            Iterator iter = map.keySet().iterator();
            while (iter.hasNext()) {
                System.out.print(map.get(iter.next()));
            }
    
            long endTime =  System.currentTimeMillis();
            System.out.println("
    keySetTest : " + (endTime - startTime));
            return endTime - startTime;
        }
    
        static long entrySetTest(Map map) {
            long startTime =  System.currentTimeMillis();
    
            Iterator iter = map.entrySet().iterator();
            Map.Entry mapEntry;
            while (iter.hasNext()) {
                mapEntry = (Map.Entry) iter.next();
                System.out.print(mapEntry.getValue());
            }
    
            long endTime = System.currentTimeMillis();
            System.out.println("
    entrySetTest : " + (endTime - startTime));
            return endTime - startTime;
        }
    }
    View Code

    原因分析:

    • 使用keySet方法访问时,构建的Set只由key组成,访问每一个value时要重新计算Hash值然后根据Hash值到Map中查找value;
    • 使用entrySet方法访问时,构建的Set直接由<key,value>组成,访问每一个value时直接取就行,无需计算Hash值。
  • 相关阅读:
    margin折叠及hasLayout && Block Formatting Contexts
    视口(viewport)原理详解之第二部分(移动端浏览器)
    Git & SSH
    .NET Core 3.0 System.Text.Json 和 Newtonsoft.Json 行为不一致问题及解决办法
    阿里云函数计算 .NET Core 初体验
    Oracle PLSQL 存储过程无法进入单步调试
    解释器错误:没有那个文件或目录
    不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。
    Oracle 11G R2 安装图解
    Oracle UTL_HTTP
  • 原文地址:https://www.cnblogs.com/crazyacking/p/5573528.html
Copyright © 2011-2022 走看看