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值。
  • 相关阅读:
    聊聊 print 的前世今生
    在树莓派里搭建 Lighttpd 服务器
    如何重复执行一条命令直至运行成功?
    手把手教你Windows Linux双系统的安装与卸载
    你以为只有马云会灌鸡汤?Linux 命令行也会!
    Linux 下三种提高工作效率的文件处理技巧
    太高效了!玩了这么久的Linux,居然不知道这7个终端快捷键!
    Linux下分析bin文件的10种方法
    Linux下几个与磁盘空间和文件尺寸相关的命令
    如何让你的脚本可以在任意地方都可执行?
  • 原文地址:https://www.cnblogs.com/crazyacking/p/5573528.html
Copyright © 2011-2022 走看看