Java中Map的五种遍历方式实现与对比

 更新时间:2025年12月13日 11:33:28   作者:AAA简单玩转程序设计  
其实Map遍历藏着多种玩法,有的优雅简洁,有的性能拉满,今天咱们盘一盘这些进阶偏基础的遍历方式,告别重复又臃肿的代码,感兴趣的小伙伴可以了解下

提起Java中Map的遍历,很多人第一反应还是: for (Map.Entry<K,V> entry : map.entrySet()) 。但其实Map遍历藏着多种玩法,有的优雅简洁,有的性能拉满,今天咱们盘一盘这些进阶偏基础的遍历方式,告别重复又臃肿的代码~

一、先搞懂:Map遍历的核心目标

遍历Map本质是获取「键(Key)」、「值(Value)」或「键值对(Entry)」,不同场景对应不同遍历方式,先上基础准备代码:

import java.util.HashMap;
import java.util.Map;

public class MapTraversalDemo {
    public static void main(String[] args) {
        Map<String, Integer> fruitPrice = new HashMap<>();
        fruitPrice.put("苹果", 10);
        fruitPrice.put("香蕉", 5);
        fruitPrice.put("橙子", 8);
        
        // 各种遍历方式写在这里~
    }
}

二、几种遍历方式的对比

1. 传统EntrySet遍历(最通用)

这是最基础也最常用的方式,支持同时获取键和值,兼容所有Java版本:

// 方式1:普通for循环+EntrySet
for (Map.Entry<String, Integer> entry : fruitPrice.entrySet()) {
    String key = entry.getKey();
    Integer value = entry.getValue();
    System.out.println(key + ":" + value + "元");
}
 

2. Lambda表达式遍历(Java 8+,极简)

Java 8引入的forEach+Lambda,一行代码搞定,告别冗余:

// 方式2:Lambda+forEach
fruitPrice.forEach((key, value) -> System.out.println(key + ":" + value + "元"));

3. 只遍历Key/Value(按需选择)

如果只需要键或值,不用遍历EntrySet,直接针对性获取:

// 只遍历Key
for (String key : fruitPrice.keySet()) {
    System.out.println("水果:" + key);
}

// 只遍历Value
for (Integer value : fruitPrice.values()) {
    System.out.println("价格:" + value + "元");
}

4. 迭代器遍历(支持删除元素)

如果遍历过程中需要删除元素,迭代器是安全选择(foreach遍历删除会抛异常):

// 方式4:迭代器遍历(支持删除)
Iterator<Map.Entry<String, Integer>> iterator = fruitPrice.entrySet().iterator();
while (iterator.hasNext()) {
    Map.Entry<String, Integer> entry = iterator.next();
    if (entry.getValue() < 8) {
        iterator.remove(); // 安全删除价格低于8的水果
    }
}
System.out.println("删除后的Map:" + fruitPrice);

三、避坑提醒

1. 遍历过程中修改Map(如put/remove):除了迭代器的remove方法,其他方式可能触发 ConcurrentModificationException ;

2. 性能优先级:EntrySet遍历 > 分别遍历Key+getValue(后者会重复查询Map);

3. Lambda遍历虽然简洁,但无法在内部使用break/continue终止遍历。

到此这篇关于Java中Map的五种遍历方式实现与对比的文章就介绍到这了,更多相关Java Map遍历内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • IDEA插件开发之环境搭建过程图文详解

    IDEA插件开发之环境搭建过程图文详解

    这篇文章主要介绍了IDEA插件开发之环境搭建过程,本文通过图文并茂实例代码相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • Maven的安装配置详解

    Maven的安装配置详解

    这篇文章主要介绍了Maven的安装配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • 详解maven中央仓库连不上的解决办法

    详解maven中央仓库连不上的解决办法

    这篇文章主要介绍了详解maven中央仓库连不上的解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Java编程环境搭建和变量基本使用图文教程

    Java编程环境搭建和变量基本使用图文教程

    这篇文章主要介绍了Java编程环境搭建和变量基本使用,结合图文形式详细分析了java编程语言环境搭建、配置、变量、注释的基本使用方法,需要的朋友可以参考下
    2020-02-02
  • 2020JDK1.8安装教程详解(一次就可安装成功)

    2020JDK1.8安装教程详解(一次就可安装成功)

    这篇文章主要介绍了2020JDK1.8安装教程详解(一次就可安装成功),本文通过图文并茂的形式分步骤给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-08-08
  • Effective Java (异常处理)

    Effective Java (异常处理)

    Effective Java (异常处理),需要的朋友可以参考一下
    2013-02-02
  • Java语法关于泛型与类型擦除的分析

    Java语法关于泛型与类型擦除的分析

    泛型没有其看起来那么深不可测,它并不神秘与神奇,泛型是Java 中一个很小巧的概念,但同时也是一个很容易让人迷惑的知识点,它让人迷惑的地方在于它的许多表现有点违反直觉
    2021-09-09
  • Java实战项目 医院预约挂号系统

    Java实战项目 医院预约挂号系统

    本文是一个Java语言编写的实战项目,是一个医院预约挂号系统,主要用到了jdbc+jsp+mysql+ajax等技术,技术含量比较高,感兴趣的童鞋跟着小编往下看吧
    2021-09-09
  • SpringBoot如何动态改变日志级别

    SpringBoot如何动态改变日志级别

    这篇文章主要介绍了SpringBoot如何动态改变日志级别,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下
    2020-12-12
  • java之TreeUtils生成一切对象树形结构案例

    java之TreeUtils生成一切对象树形结构案例

    这篇文章主要介绍了java之TreeUtils生成一切对象树形结构案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09

最新评论