Map的遍历方式

一、Map 集合遍历的核心思路

Map 集合与 List、Set 等单列集合不同,它存储的是键值对映射关系,因此遍历的核心是获取键和对应的值。常见的遍历思路有两种:

  1. 先获取所有键,再通过键找对应的值(键找值法)
  2. 直接获取所有键值对对象,再从对象中提取键和值(键值对法)

二、具体遍历方式及代码实现

HashMap<String, String>为例,先初始化一个包含数据的 Map:

java 复制代码
Map<String, String> map = new HashMap<>();
map.put("1", "2");
map.put("3", "4");
map.put("5", "6");

方式一:键找值法(通过 keySet () 实现)

原理

  1. 调用map.keySet()方法,获取所有键(Key)组成的Set集合
  2. 遍历该Set集合,得到每个键
  3. 通过map.get(key)方法,根据键获取对应的值(Value)

该方式支持三种遍历实现:增强 for 循环、迭代器、Lambda 表达式。

1. 增强 for 循环遍历
java 复制代码
// 1.获取所有键的Set集合
Set<String> keys = map.keySet();
// 2.增强for循环遍历键集合
for (String key : keys) {
    String value = map.get(key);
    System.out.println(key + "=" + value);
}
2. 迭代器遍历
java 复制代码
// 1.获取所有键的Set集合
Set<String> keys = map.keySet();
// 2.获取迭代器
Iterator<String> it = keys.iterator();
// 3.迭代遍历
while (it.hasNext()) {
    String key = it.next();
    String value = map.get(key);
    System.out.println(key + "=" + value);
}
3. Lambda 表达式遍历

利用Set集合的forEach方法,结合 Lambda 表达式简化代码:

java 复制代码
// 1.获取所有键的Set集合
Set<String> keys = map.keySet();
// 2.Lambda遍历
keys.forEach(key -> {
    String value = map.get(key);
    System.out.println(key + "=" + value);
});

方式二:键值对法(通过 entrySet () 实现)

原理

  1. 调用map.entrySet()方法,获取所有键值对(Map.Entry)组成的Set集合(Entry是 Map 的内部接口,代表一个键值对)
  2. 遍历该Set集合,得到每个Entry对象
  3. 通过entry.getKey()entry.getValue()直接获取键和值

该方式同样支持三种遍历实现,且效率通常高于键找值法(无需多次调用get()方法)。

1. 增强 for 循环遍历
java 复制代码
// 1.获取所有键值对的Set集合
Set<Map.Entry<String, String>> entries = map.entrySet();
// 2.增强for循环遍历键值对集合
for (Map.Entry<String, String> entry : entries) {
    String key = entry.getKey();
    String value = entry.getValue();
    System.out.println("key=" + key + ", value=" + value);
}
2. 迭代器遍历
java 复制代码
// 1.获取所有键值对的Set集合
Set<Map.Entry<String, String>> entries = map.entrySet();
// 2.获取迭代器
Iterator<Map.Entry<String, String>> it = entries.iterator();
// 3.迭代遍历
while (it.hasNext()) {
    Map.Entry<String, String> entry = it.next();
    String key = entry.getKey();
    String value = entry.getValue();
    System.out.println("key=" + key + ", value=" + value);
}
3. Lambda 表达式遍历
java 复制代码
// 1.获取所有键值对的Set集合
Set<Map.Entry<String, String>> entries = map.entrySet();
// 2.Lambda遍历
entries.forEach(entry -> {
    String key = entry.getKey();
    String value = entry.getValue();
    System.out.println(key + "=" + value);
});

Map.forEach () 方法

Java 8 之后,Map 接口直接提供了forEach方法,可更简洁地遍历:

java 复制代码
map.forEach((key, value) -> {
    System.out.println(key + "=" + value);
});

Stream API 遍历

结合流的操作(如过滤、映射等)实现更灵活的遍历。

java 复制代码
Map<String, String> map = new HashMap<>();
map.put("1", "2");
map.put("3", "4");
map.put("5", "6");

// 通过entrySet获取流,遍历所有键值对
map.entrySet().stream()
    .forEach(entry -> {
        String key = entry.getKey();
        String value = entry.getValue();
        System.out.println(key + "=" + value);
    });

// 结合过滤操作(例如只打印键为偶数的键值对)
map.entrySet().stream()
    .filter(entry -> Integer.parseInt(entry.getKey()) % 2 == 0)
    .forEach(entry -> System.out.println("过滤后:" + entry.getKey() + "=" + entry.getValue()));

特点:

  • 支持链式操作(过滤、映射、排序等),适合复杂业务场景
  • 代码简洁,功能强大,是 Java 8 + 推荐的高级遍历方式
  • 本质是对entrySet的流式处理,可看作entrySet遍历的增强版
相关推荐
2401_8920709823 分钟前
顺序栈(动态数组实现) 超详细解析(C++ 语言 + 可直接运行)
数据结构·c++·顺序栈
卷福同学27 分钟前
去掉手机APP开屏广告,李跳跳2.2下载使用
java·后端·算法
漫霂37 分钟前
二叉树的翻转
java·数据结构·算法
语戚37 分钟前
力扣 51. N 皇后:基础回溯、布尔数组优化、位运算全解(Java 实现)
java·算法·leetcode·力扣·剪枝·回溯·位运算
熊猫钓鱼>_>40 分钟前
从零构建大模型可调用的Skill:基于Function Calling的完整指南
人工智能·算法·语言模型·架构·agent·skill·functioncall
py有趣1 小时前
力扣热门100题之螺旋矩阵
算法·leetcode
3秒一个大1 小时前
深入理解 JS 中的栈与堆:从内存模型到数据结构,再谈内存泄漏
前端·javascript·数据结构
xiaoyaohou111 小时前
003、轻量化改进(一):网络剪枝原理与实战
算法·机器学习·剪枝
我是章汕呐1 小时前
政策评估的“黄金标准”:DID模型从原理到Stata实操
大数据·人工智能·经验分享·算法·回归
2301_822703201 小时前
光影进度条:鸿蒙Flutter实现动态光影效果的进度条
算法·flutter·华为·信息可视化·开源·harmonyos