【java】TreeMap/HashMap的循环迭代中 keySet和entrySet和forEach方式 + map的几种迭代方式

时间:2022-03-17 19:38:36

参考链接:https://www.cnblogs.com/crazyacking/p/5573528.html

 ==================================

java紫色代表迭代方式

效率测试:100W 

==================================

 

 HashMap迭代方式1:entrySet迭代

public static void main(String[] args) {
        Map<String,String>  hashMap = new HashMap<>();
        long beginTime = System.currentTimeMillis();
        System.out.println("hashMap存储开始时间-->"+beginTime);
        for (int i = 0; i < 1000000; i++) {
            hashMap.put(UUID.randomUUID().toString(),UUID.randomUUID().toString());
        }
        long endTime = System.currentTimeMillis();
        System.out.println("hashMap存储结束时间-->"+endTime);
        System.out.println("hashMap存储消耗:"+(endTime-beginTime)+"ms");

        System.out.println("hashMap【entrySet方式】读取开始时间-->"+endTime);
        //可以使用外部定义变量
        for (Map.Entry<String,String> entry : hashMap.entrySet()){ System.out.println(entry.getKey() + ":" + entry.getValue()); } long endTime2 = System.currentTimeMillis();
        System.out.println("hashMap【entrySet方式】读取结束时间-->"+endTime2);
        System.out.println("hashMap【entrySet方式】读取消耗:"+(endTime2-endTime)+"ms");
    }

【java】TreeMap/HashMap的循环迭代中 keySet和entrySet和forEach方式 + map的几种迭代方式

【java】TreeMap/HashMap的循环迭代中 keySet和entrySet和forEach方式 + map的几种迭代方式

 

===================================================================

 HashMap迭代方式2:keySet迭代

public static void main(String[] args) {
        Map<String,String>  hashMap = new HashMap<>();
        long beginTime = System.currentTimeMillis();
        System.out.println("hashMap存储开始时间-->"+beginTime);
        for (int i = 0; i < 1000000; i++) {
            hashMap.put(UUID.randomUUID().toString(),UUID.randomUUID().toString());
        }
        long endTime = System.currentTimeMillis();
        System.out.println("hashMap存储结束时间-->"+endTime);
        System.out.println("hashMap存储消耗:"+(endTime-beginTime)+"ms");

        System.out.println("hashMap【keySet方式】读取开始时间-->"+endTime);
        //可以使用外部定义变量
        Set<String> keySet = hashMap.keySet(); for (String s : keySet) { System.out.println(s+":"+hashMap.get(s)); } long endTime2 = System.currentTimeMillis();
        System.out.println("hashMap【keySet方式】读取结束时间-->"+endTime2);
        System.out.println("hashMap【keySet方式】读取消耗:"+(endTime2-endTime)+"ms");
    }

【java】TreeMap/HashMap的循环迭代中 keySet和entrySet和forEach方式 + map的几种迭代方式

【java】TreeMap/HashMap的循环迭代中 keySet和entrySet和forEach方式 + map的几种迭代方式

 

 =================================================================

HashMap迭代方式3:forEach方式

 

public static void main(String[] args) {
        Map<String,String>  hashMap = new HashMap<>();
        long beginTime = System.currentTimeMillis();
        System.out.println("hashMap存储开始时间-->"+beginTime);
        for (int i = 0; i < 1000000; i++) {
            hashMap.put(UUID.randomUUID().toString(),UUID.randomUUID().toString());
        }
        long endTime = System.currentTimeMillis();
        System.out.println("hashMap存储结束时间-->"+endTime);
        System.out.println("hashMap存储消耗:"+(endTime-beginTime)+"ms");

        System.out.println("hashMap【forEach方式】读取开始时间-->"+endTime);
        //不能使用外部定义变量 除非final类型 例如:List
        hashMap.forEach((k,v)->{ System.out.println(k +":"+v); }); long endTime2 = System.currentTimeMillis();
        System.out.println("hashMap【forEach方式】读取结束时间-->"+endTime2);
        System.out.println("hashMap【forEach方式】读取消耗:"+(endTime2-endTime)+"ms");
    }

【java】TreeMap/HashMap的循环迭代中 keySet和entrySet和forEach方式 + map的几种迭代方式

【java】TreeMap/HashMap的循环迭代中 keySet和entrySet和forEach方式 + map的几种迭代方式

 

======================================================================================================= 

 

 TreeMap迭代:entrySet方式

【java】TreeMap/HashMap的循环迭代中 keySet和entrySet和forEach方式 + map的几种迭代方式【java】TreeMap/HashMap的循环迭代中 keySet和entrySet和forEach方式 + map的几种迭代方式
public static void main(String[] args) {
        Map<String,String>  hashMap = new TreeMap<>();
        long beginTime = System.currentTimeMillis();
        System.out.println("TreeMap存储开始时间-->"+beginTime);
        for (int i = 0; i < 1000000; i++) {
            hashMap.put(UUID.randomUUID().toString(),UUID.randomUUID().toString());
        }
        long endTime = System.currentTimeMillis();
        System.out.println("TreeMap存储结束时间-->"+endTime);
        System.out.println("TreeMap存储消耗:"+(endTime-beginTime)+"ms");

        System.out.println("TreeMap【entrySet方式】读取开始时间-->"+endTime);
        //可以使用外部定义变量
        for (Map.Entry<String,String> entry :  hashMap.entrySet()){
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
        long endTime2 = System.currentTimeMillis();
        System.out.println("TreeMap【entrySet方式】读取结束时间-->"+endTime2);
        System.out.println("TreeMap【entrySet方式】读取消耗:"+(endTime2-endTime)+"ms");
    }
View Code

【java】TreeMap/HashMap的循环迭代中 keySet和entrySet和forEach方式 + map的几种迭代方式

【java】TreeMap/HashMap的循环迭代中 keySet和entrySet和forEach方式 + map的几种迭代方式

 

=================================================

TreeMap迭代:keySet方式

【java】TreeMap/HashMap的循环迭代中 keySet和entrySet和forEach方式 + map的几种迭代方式【java】TreeMap/HashMap的循环迭代中 keySet和entrySet和forEach方式 + map的几种迭代方式
public static void main(String[] args) {
        Map<String,String>  hashMap = new TreeMap<>();
        long beginTime = System.currentTimeMillis();
        System.out.println("TreeMap存储开始时间-->"+beginTime);
        for (int i = 0; i < 1000000; i++) {
            hashMap.put(UUID.randomUUID().toString(),UUID.randomUUID().toString());
        }
        long endTime = System.currentTimeMillis();
        System.out.println("TreeMap存储结束时间-->"+endTime);
        System.out.println("TreeMap存储消耗:"+(endTime-beginTime)+"ms");

        System.out.println("TreeMap【keySet方式】读取开始时间-->"+endTime);
        //可以使用外部定义变量
        Set<String> keySet = hashMap.keySet();
        for (String s : keySet) {
            System.out.println(s+":"+hashMap.get(s));
        }
        long endTime2 = System.currentTimeMillis();
        System.out.println("TreeMap【keySet方式】读取结束时间-->"+endTime2);
        System.out.println("TreeMap【keySet方式】读取消耗:"+(endTime2-endTime)+"ms");
    }
View Code

 【java】TreeMap/HashMap的循环迭代中 keySet和entrySet和forEach方式 + map的几种迭代方式

【java】TreeMap/HashMap的循环迭代中 keySet和entrySet和forEach方式 + map的几种迭代方式

 

==========================================================

TreeMap迭代:forEach方式

【java】TreeMap/HashMap的循环迭代中 keySet和entrySet和forEach方式 + map的几种迭代方式【java】TreeMap/HashMap的循环迭代中 keySet和entrySet和forEach方式 + map的几种迭代方式
 public static void main(String[] args) {
        Map<String,String>  hashMap = new TreeMap<>();
        long beginTime = System.currentTimeMillis();
        System.out.println("TreeMap存储开始时间-->"+beginTime);
        for (int i = 0; i < 1000000; i++) {
            hashMap.put(UUID.randomUUID().toString(),UUID.randomUUID().toString());
        }
        long endTime = System.currentTimeMillis();
        System.out.println("TreeMap存储结束时间-->"+endTime);
        System.out.println("TreeMap存储消耗:"+(endTime-beginTime)+"ms");

        System.out.println("TreeMap【forEach方式】读取开始时间-->"+endTime);
        //不能使用外部定义变量 除非final类型 例如:List
        hashMap.forEach((k,v)->{
            System.out.println(k +":"+v);
        });
        long endTime2 = System.currentTimeMillis();
        System.out.println("TreeMap【forEach方式】读取结束时间-->"+endTime2);
        System.out.println("TreeMap【forEach方式】读取消耗:"+(endTime2-endTime)+"ms");
    }
View Code

【java】TreeMap/HashMap的循环迭代中 keySet和entrySet和forEach方式 + map的几种迭代方式

【java】TreeMap/HashMap的循环迭代中 keySet和entrySet和forEach方式 + map的几种迭代方式

 

 

 

=========================================================

100W级别

基本判断【并不准确】:HashMap存储效率高,读取效率也比较高

           TreeMap存储效率低,读取效率差不多

=========================================================

 1000W级别