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循环性能对比


目录
相关文章
go语言中遍历映射(map)
go语言中遍历映射(map)
308 8
|
3月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
242 1
|
7月前
|
存储 JavaScript 前端开发
for...of循环在遍历Set和Map时的注意事项有哪些?
for...of循环在遍历Set和Map时的注意事项有哪些?
345 121
|
7月前
|
安全 Java 数据库连接
让我们讲解一下 Map 集合遍历的方式
我是小假 期待与你的下一次相遇 ~
274 43
|
8月前
|
存储 安全 Go
Map的遍历与判断键是否存在-《Go语言实战指南》
本文介绍了 Go 语言中对 `map` 的常见操作,包括遍历所有项和判断键是否存在。通过 `for range` 可以遍历 `map` 的键值对、仅键或仅值(需忽略键)。注意,`map` 遍历顺序是随机的。判断键是否存在时,使用双赋值语法 `value, ok := map[key]`,其中 `ok` 表示键是否存在。直接访问不存在的键会返回类型的零值,可能导致逻辑错误。掌握这些机制可更安全高效地处理键值对数据。
|
8月前
|
安全 Java API
【Java性能优化】Map.merge()方法:告别繁琐判空,3行代码搞定统计累加!
在日常开发中,我们经常需要对Map中的值进行累加统计。}else{代码冗长,重复调用get()方法需要显式处理null值非原子操作,多线程下不安全今天要介绍的方法,可以让你用一行代码优雅解决所有这些问题!方法的基本用法和优势与传统写法的对比分析多线程安全版本的实现Stream API的终极优化方案底层实现原理和性能优化建议一句话总结是Java 8为我们提供的Map操作利器,能让你的统计代码更简洁、更安全、更高效!// 合并两个列表});简单累加。
745 0
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
4434 113
|
10月前
|
存储 监控 Java
《从头开始学java,一天一个知识点》之:数组入门:一维数组的定义与遍历
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问&quot;`a==b`和`equals()`的区别&quot;,大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 这个系列就是为你打造的Java「速效救心丸」!我们承诺:每天1分钟,地铁通勤、午休间隙即可完成学习;直击痛点,只讲高频考点和实际开发中的「坑位」;拒绝臃肿,没有冗长概念堆砌,每篇都有可运行的代码标本。明日预告:《多维数组与常见操作》。 通过实例讲解数组的核心认知、趣味场景应用、企业级开发规范及优化技巧,帮助你快速掌握Java数组的精髓。
224 23
|
10月前
使用 entrySet 遍历 Map 类集合 KV
使用 entrySet 遍历 Map 类集合 KV