Map集合的5种遍历方式

我们用一个具体例子带着你走一遍 5 种写法

假设表单提交了:

username = "张三"

age = "20"

hobby = "游戏"

hobby = "唱歌"

那么:

Map map = request.getParameterMap();

逻辑上内容是:

"username" → "张三"

"age" → "20"

"hobby" → "游戏","唱歌"

下面所有遍历都是基于这玩意。

方式一:keySet 遍历

for (String key : map.keySet()) { String\[\] values = map.get(key); System.out.println("key = " + key + ", value = " + Arrays.toString(values)); }

拆开理解:

map.keySet():拿到所有 key 的"集合" 比如:"username","age","hobby"

每次循环拿一个 key

再用 map.get(key) 拿到对应的值数组

对上面的 map 来说,循环 3 次:

key = username, value = "张三"

key = age, value = "20"

key = hobby, value = "游戏","唱歌"

方式二:entrySet 增强 for 遍历

for (Map.Entry<String, String\[\]> entry : map.entrySet()) { String key = entry.getKey(); String\[\] values = entry.getValue(); System.out.println("key = " + key + ", value = " + Arrays.toString(values)); }

entrySet 是啥?

map.entrySet() = 所有"键值对"的集合 可以理解为一组小包: ("username",\["张三"), ("age","20"), ("hobby","游戏","唱歌") ]

每次 for 拿到一个 entry,相当于拿到一组"键+值":

第一次:key=username, values="张三"

第二次:key=age, values="20"

第三次:key=hobby, values="游戏","唱歌"

方式三:entrySet + Iterator 遍历

Iterator<Map.Entry<String, String\[\]>> iterator = map.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String, String\[\]> entry = iterator.next(); String key = entry.getKey(); String\[\] values = entry.getValue(); System.out.println("key = " + key + ", value = " + Arrays.toString(values)); }

这其实和方式二是一个东西,只是循环写法换成了 Iterator:

方式二:增强 for

方式三:while + iterator

为啥还要学这个?

因为 Iterator 有个能力:遍历过程中可以删元素:

iterator.remove();

方式四:map.forEach(匿名内部类) 遍历

map.forEach(new BiConsumer<String, String\[\]>() { @Override public void accept(String k, String\[\] v) { System.out.println("key = " + k + ", value = " + Arrays.toString(v)); } });

含义:

forEach 是 Java 8 给 Map 加的方法

传一个"函数"(这里是匿名内部类 BiConsumer)

Map 内部会对每个键值对调用一次 accept(k,v)

其实等价于:

for (entry : map.entrySet()) { ... }

只是换成了"回调"的写法。

方式五:map.forEach(λ表达式) 遍历

map.forEach((k, v) -> { System.out.println("key = " + k + ", value = " + Arrays.toString(v)); });

这里:

(k, v) 就是每一个 key 和 value(value 是数组)

内部的 println 是对每一组键值对执行一次

对我们的 map 来说,会执行 3 次:

key = username, value = "张三"

key = age, value = "20"

key = hobby, value = "游戏","唱歌"

相关推荐
Autumn_ing9 分钟前
Design.md生成UI怎么验收?举例运营后台的颜色、状态和数据核对
前端·ui·ai·设计系统·paico·ai生成ui·design.md
远离UE41 小时前
UE5 Substrate Thin Film 源码拆析
开发语言·javascript·ue5
keyipatience1 小时前
JavaScript学习(1)书写位置,变量、数据类型、运算符
开发语言·前端·javascript·css·学习
Thinker QAQ1 小时前
并发编程(九):BlockingQueue 与 Channel——语言层的原子性、可见性与有序性
java·python·go·并发编程·channel·blockingqueue·message passing
朱涛的自习室1 小时前
我给 Gemini 4 和 DeepSeek 搞了套「末位淘汰」,AI 干活会更猛吗?(Day 3)
android·前端·后端
霸道流氓气质2 小时前
RAG 可观测性与生产监控实战:四层遥测模型、五大仪表盘与 OpenTelemetry 全链路追踪的 Java 生产级实现
java·人工智能·python
AOI小白新手上路2 小时前
autodl常用的tar 打包下载(数据集)命令手册:逐段拆解与套用模板
java·大数据·数据库
java1234_小锋4 小时前
【技术专题】HTML5 网页技术 - HTML5简介 & HTML5 文档结构
前端·html·html5
鶴哥只手遮天4 小时前
Vue 3 核心源码深度剖析系列(v3.5.44)-第 1 章 项目全景:monorepo 架构与工程化体系
前端·vue.js·开源