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 = ["游戏","唱歌"]

相关推荐
前端Hardy12 小时前
前端必看!LocalStorage这么用,再也不踩坑(多框架通用,直接复制)
前端·javascript·面试
前端Hardy12 小时前
前端必看!前端路由守卫这么写,再也不担心权限混乱(Vue/React通用)
前端·javascript·面试
NHuan^_^12 小时前
SpringBoot3 整合 SpringAI 实现ai助手(记忆)
java·人工智能·spring boot
Lee川12 小时前
从零构建现代化登录界面:React + Tailwind CSS 前端工程实践
前端·react.js
Awu122712 小时前
⚡精通 Claude 第 1 课:掌握 Slash Commands
前端·人工智能·ai编程
竹林81812 小时前
从ethers.js迁移到Viem:我在重构DeFi前端时踩过的那些坑
前端·javascript
码云之上12 小时前
上下文工程实战:解决多轮对话中的"上下文腐烂"问题
前端·node.js·agent
Mr_Xuhhh12 小时前
从ArrayList到LinkedList:理解链表,掌握Java集合的另一种选择
java·数据结构·链表
小小弯_Shelby12 小时前
webpack优化:Vue配置compression-webpack-plugin实现gzip压缩
前端·vue.js·webpack
小村儿12 小时前
连载04-CLAUDE.md ---一起吃透 Claude Code,告别 AI coding 迷茫
前端·后端·ai编程