Java Map集合的几种遍历方式与性能对比(包含lambda表达式)

简介: 综上所述:第三种遍历方式在数据量非常小时是最好的,第五种遍历方式是最简单粗暴的。

实例代码如下:

public static void main(String[] args) {
        Map<String, String> map = new HashMap<String, String>();
        map.put("key1", "value1");
        map.put("key2", "value2");
        map.put("key3", "value3");
        long l1 = System.nanoTime();
        // 第一种遍历方式
        System.out.println("第一种遍历方式:通过遍历 Map 的 keySet,遍历 Key 和 Value");
        for (String key : map.keySet()) {
            System.out.println("Key: " + key + ", Value: " + map.get(key));
        }
        long l2 = System.nanoTime();
        // 第二种遍历方式(如果在遍历过程中,有删除某些Key-Value的需求,可以使用这种遍历方式)
        System.out.println("\n第二种遍历方式:通过Iterator 迭代器遍历 Key 和 Value");
        Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, String> entry = iterator.next();
            System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
        }
        long l3 = System.nanoTime();
        // 第三种遍历方式(推荐,尤其是容量大时)
        System.out.println("\n第三种遍历方式:通过遍历 Map 的 entrySet,遍历 Key 和 Value");
        for (Map.Entry<String, String> entry : map.entrySet()) {
            System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
        }
        long l4 = System.nanoTime();
        // 第四种遍历方式
        System.out.println("\n第四种遍历方式:通过遍历 Map 的 values,只能遍历 Value,获取不到对应的 Key");
        for (String value : map.values()) {
            System.out.println("Value: " + value);
        }
        long l5 = System.nanoTime();
        // 第五种遍历方式(JDK 1.8支持的 Lambda 表达式,强烈推荐!!!)
        System.out.println("\n第五种遍历方式:通过 Lambda 表达式,遍历 Key 和 Value");
        map.forEach((key, value) -> {
            System.out.println("Key: " + key + ", Value: " + value);
        });
        long l6 = System.nanoTime();
        // 第五种遍历方式(JDK 1.8支持的 Lambda 表达式,强烈推荐!!!)
        System.out.println("\n第五种遍历方式:通过 Lambda 表达式,遍历 Key 和 Value");
        map.forEach((key, value) -> {
            System.out.println("Key: " + key + ", Value: " + value);
        });
        long l7 = System.nanoTime();
        System.out.println("1----" + (l2 - l1) / 1000);
        System.out.println("2----" + (l3 - l2) / 1000);
        System.out.println("3----" + (l4 - l3) / 1000);
        System.out.println("4----" + (l5 - l4) / 1000);
        System.out.println("5----" + (l6 - l5) / 1000);
        System.out.println("6----" + (l7 - l6) / 1000);
    }

运行结果如下:

0979c599e41be16916c1d8d9eaea57ee_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdfZ3Vhbmcz,size_16,color_FFFFFF,t_70.png

综上所述:第三种遍历方式在数据量非常小时是最好的,第五种遍历方式是最简单粗暴的。

如 果 数 据 量 特 别 大 时 , 推 荐 使 用 第 五 种 方 式 , 但 是 需 要 在 项 目 启 动 时 就 加 载 , 这 样 可 以 大 大 提 高 效 率 \color{#FF0000}{如果数据量特别大时,推荐使用第五种方式,但是需要在项目启动时就加载,这样可以大大提高效率}如果数据量特别大时,推荐使用第五种方式,但是需要在项目启动时就加载,这样可以大大提高效率关于lambda表达式的用法可以参照:

java8 lambda forEach循环与增强for循环性能对比


目录
相关文章
|
2天前
|
存储 安全 Java
[Java基础面试题] Map 接口相关
[Java基础面试题] Map 接口相关
|
2天前
|
Java 程序员 编译器
JavaSE&Java8 Lambda 表达式
JavaSE&Java8 Lambda 表达式
|
2天前
|
存储 Java C++
Java集合篇之深度解析Queue,单端队列、双端队列、优先级队列、阻塞队列
Java集合篇之深度解析Queue,单端队列、双端队列、优先级队列、阻塞队列
16 0
|
6天前
|
并行计算 Java 编译器
Java Lambda表达式简介
Java Lambda表达式简介
12 0
|
7天前
|
Java API
Java Lambda
Java Lambda
15 0
|
7天前
|
Java 开发者
探索 Java 的函数式接口和 Lambda 表达式
【4月更文挑战第19天】Java 中的函数式接口和 Lambda 表达式提供了简洁、灵活的编程方式。函数式接口有且仅有一个抽象方法,用于与 Lambda(一种匿名函数语法)配合,简化代码并增强可读性。Lambda 表达式的优点在于其简洁性和灵活性,常用于事件处理、过滤和排序等场景。使用时注意兼容性和变量作用域,它们能提高代码效率和可维护性。
|
10天前
|
SQL 缓存 Java
Java数据库连接池:优化数据库访问性能
【4月更文挑战第16天】本文探讨了Java数据库连接池的重要性和优势,它能减少延迟、提高效率并增强系统的可伸缩性和稳定性。通过选择如Apache DBCP、C3P0或HikariCP等连接池技术,并进行正确配置和集成,开发者可以优化数据库访问性能。此外,批处理、缓存、索引优化和SQL调整也是提升性能的有效手段。掌握数据库连接池的使用是优化Java企业级应用的关键。
|
10天前
|
分布式计算 Java API
Java 8新特性之Lambda表达式与Stream API
【4月更文挑战第16天】本文将介绍Java 8中的两个重要新特性:Lambda表达式和Stream API。Lambda表达式是Java 8中引入的一种新的编程语法,它允许我们将函数作为参数传递给其他方法,从而使代码更加简洁、易读。Stream API是Java 8中引入的一种新的数据处理方式,它允许我们以声明式的方式处理数据,从而使代码更加简洁、高效。本文将通过实例代码详细讲解这两个新特性的使用方法和优势。
|
14天前
|
存储 Java 测试技术
Java 21革命性升级:探索分代ZGC的性能奇迹
Java 21革命性升级:探索分代ZGC的性能奇迹
14 0
|
Java
Java中如何遍历Map对象
博主有时会忘记如何遍历Map对象,这次在这里做一下总结。博主采用的是JDK7,先看一下JDK7中Map接口的定义。 java.util Interface Map 类型参数: K - the type of keys maintained by this...
887 0