Map集合遍历方法详解与常用技巧
时间:2026-08-18 | 作者:半糖攻略君 | 阅读:0在程序开发中,经常需要取出Map中所有的键和值,那么如何遍历Map中所有的键值对呢?Map集合遍历的方式和单列集合Collection集合遍历的方式基本相同,主要有两种方式可以实现:第一种方式,可以使用Iterator迭代器遍历集合;第二种方式就是使用JDK 8提供的forEach(Consumer action)方法遍历集合。接下来,就以前面学习的HashMap集合为例来分别对这两种集合遍历方式进行详细讲解。
1.Iterator迭代器遍历Map集合
使用Iterator迭代器遍历Map集合,需要先将Map集合转换为Iterator接口对象,然后进行遍历,由于Map集合中元素是由键值对组成的,所以使用Iterator接口遍历Map集合时,会有两种将Map集合转换为Iterator接口对象再进行遍历的方法:keySet()方法和entrySet()方法。
其中,keySet()方法,需要先将Map集合中所有键对象转换为Set单列集合,接着将包含键对象的Set集合转换为Iterator接口对象,然后遍历Map集合中所有的键,再根据键获取相应的值。接下来就通过一个案例来演示先遍历Map集合中所有的键,再根据键获取相应的值的方式,如文件1所示。
文件1 Example15.ja va
1 import ja va.util.*;
2 public class Example15 {
3 public static void main(String[] args) {
4 Map map = new HashMap(); // 创建Map集合
5 map.put("1", "Jack"); // 存储元素
6 map.put("2", "Rose");
7 map.put("3", "Lucy");
8 System.out.println(map);
9 Set keySet = map.keySet(); // 获取键的集合
10 Iterator it = keySet.iterator(); // 迭代键的集合
11 while (it.hasNext()) {
12 Object key = it.next();
13 Object value = map.get(key); // 获取每个键所对应的值
14 System.out.println(key + ":" + value);
15 }
16 }
17 }
运行结果如图1所示。
图1 运行结果
文件1中,首先调用Map对象的KeySet()方法,获得存储Map集合中所有键的Set集合,然后通过Iterator迭代Set集合的每一个键元素,最后通过get(Objectkey)方法,根据键获取对应的值。
Map集合还有一种常见的遍历方式,就是配合Iterator迭代器使用entrySet()方法。这个方法会把原来Map中的每一组键值对,当作一个整体返回成Set集合;随后,再把这个装着键值对对象的Set集合转换成Iterator接口对象,依次取出集合中的所有键值对映射关系,最后再从这些映射关系里分别拿到键和值。接下来,需要把文件1中的第9~15行代码做相应调整,改成通过entrySet()方法来遍历Map集合,修改后的代码示例如下所示:
import ja va.util.*;
public class Example15 {
public static void main(String[] args) {
Map map = new HashMap();
map.put("1", "Jack");
map.put("2", "Rose");
map.put("3", "Lucy");
System.out.println(map);
Set entrySet = map.entrySet();
Iterator it = entrySet.iterator(); // 获取Iterator对象
while (it.hasNext()) {
// 获取集合中键值对映射关系
Map.Entry entry = (Map.Entry) (it.next());
Object key = entry.getKey(); // 获取Entry中的键
Object value = entry.getValue(); // 获取Entry中的值
System.out.println(key + ":" + value);
}
}
}
再次运行文件1,运行结果如图2所示。
图2 运行结果
在上述修改的代码示例中,首先调用Map对象的entrySet()方法获得存储Map中所有键值映射的Set集合,这个集合中存放了Map.Entry类型的元素(Entry是Map接口内部类),每个Map.Entry对象代表Map中的一个键值对,然后迭代Set集合,获得每一个映射对象,并分别调用映射对象的getKey()和getValue()方法获取键和值。
2.JDK 8新方法遍历集合Map集合
和Collection集合的遍历思路一样,到了JDK 8,Map集合也顺着Lambda表达式这条线新增了forEach(BiConsumer action)方法,专门用来完成遍历操作。因为这个方法接收的参数本身就是函数式接口,所以完全可以直接用Lambda表达式来写,代码会更简洁,也更直观。下面结合一个具体案例,看看forEach(BiConsumer action)方法是怎样遍历Map集合的,示例见文件2。
文件2 Example16.ja va
1 import ja va.util.HashMap;
2 import ja va.util.Map;
3 public class Example16 {
4 public static void main(String[] args) {
5 Map map = new HashMap();
6 map.put("1", "Jack");
7 map.put("2", "Rose");
8 map.put("3", "Lucy");
9 System.out.println(map);
10 // 使用JDK 8新增的forEach(BiConsumer action)方法遍历集合
11 map.forEach((key,value) -> System.out.println(key + ":" + value));
12 }
13 }
运行结果如图3所示。
图3 运行结果
文件2中,使用了JDK 8中Map集合新增的forEach(BiConsumer action)方法对集合中的元素进行遍历,该方法传递的是一个Lambda表达式书写的函数式接口BiConsumer。forEach(BiConsumer action)方法在执行时,会自动遍历集合元素的键和值并将结果逐个传递给Lambda表达式的形参。
在Map集合中,除了以上两种主要的遍历方式外,还提供了一个values()方法,通过这个方法可以直接获取Map中存储所有值的Collection集合,接下来通过一个案例来演示,如文件3所示。
文件3 Example17.ja va
1 import ja va.util.*;
2 public class Example17 {
3 public static void main(String[] args) {
4 Map map = new HashMap();
5 map.put("1", "Jack");
6 map.put("2", "Rose");
7 map.put("3", "Lucy");
8 System.out.println(map);
9 Collection values = map.values(); // 获取Map集合中value值集合对象
10 // 遍历Map集合所有值对象V
11 values.forEach(v -> System.out.println(v));
12 }
13 }
运行结果如图4所示。
图4 运行结果
在文件3中,通过调用Map的values()方法获取包含Map中所有值的Collection集合,然后迭代出集合中的每一个值。
多学一招:使用LinkedHashMap集合保证元素添加顺序
在前面小节介绍HashMap集合时,已经说明HashMap集合并不保证集合元素存入和取出的顺序。如果想让这两个顺序一致,可以使用Ja va中提供的LinkedHashMap类,它是HashMap的子类,和LinkedList一样也使用双向链表来维护内部元素的关系,使LinkedHashMap元素迭代的顺序与存入的顺序一致,接下来通过一个案例来学习一下LinkedHashMap的用法,如文件4所示。
文件4 Example18.ja va
1 import ja va.util.*;
2 public class Example18 {
3 public static void main(String[] args) {
4 Map map1 = new HashMap(); // 创建HashMap集合
5 map1.put(2, "Rose");
6 map1.put(1, "Jack");
7 map1.put(3, "Lucy");
8 map1.forEach((key,value) -> System.out.println(key + ":" + value));
9 System.out.println("=====================");
10 Map map2 = new LinkedHashMap(); // 创建LinkedHashMap集合
11 map2.put(2, "Rose");
12 map2.put(1, "Jack");
13 map2.put(3, "Lucy");
14 map2.forEach((key,value) -> System.out.println(key + ":" + value));
15 }
16 }
运行结果如图5所示。
图5 运行结果
在文件4中,分别创建了HashMap和LinkedHashMap两个集合,并按相同的顺序插入了相同的元素,然后使用forEach(BiConsumer action)方法将元素遍历取出。从运行结果可以看出,使用HashMap集合取出的元素并不能保证与存入元素顺序一致,而LinkedHashMap集合却可以保证存入和取出的一致性。
一般情况下,我们用的最多的是HashMap,在Map中插入、删除和定位元素,HashMap 是最好的选择。但如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现,它还可以按读取顺序来排列。
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 迅捷路由器怎么调信号最强,设置时要注意什么?
- 时间:2026-08-27
-
- vivo浏览器怎么卸不掉?原因和解决方法在这里
- 时间:2026-08-27
-
- OPPO R11s黑屏了,怎么强制恢复出厂设置?
- 时间:2026-08-27
-
- 飞利浦显示器包装盒有生产日期和保修期吗?怎么看?
- 时间:2026-08-27
-
- 联想新平板开机必须联网吗?怎么做?
- 时间:2026-08-27
-
- 平板横竖屏切换设置与问题解决
- 时间:2026-08-27
-
- 移动电源容量怎么测?要准备哪些工具?
- 时间:2026-08-27
-
- 荣耀90 Pro防水吗?防水级别多少?怎么用才安全
- 时间:2026-08-27
精选合集
更多大家都在玩
大家都在看
更多-
- 糖尿病完全不能吃糖吗
- 时间:2026-09-15
-
- 蚂蚁庄园小课堂2026年9月16日最新题目答案
- 时间:2026-09-15
-
- 小鸡答题今天的答案是什么2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园每日答题答案2026年9月16日
- 时间:2026-09-15
-
- 以下哪种粮食是酿造绍兴黄酒的主要原料 蚂蚁庄园今日答案9月16日
- 时间:2026-09-15
-
- 劝学名句“及时当勉励,岁月不待人”出自哪位诗人 蚂蚁庄园今日答案9.16
- 时间:2026-09-15
-
- 蚂蚁庄园今天答题答案2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园答题今日答案2026年9月16日
- 时间:2026-09-15




