Java Map集合的用法(附带实例)
Java 中的 Map(映射)集合表示一种非常复杂的集合,允许按照某个键来访问元素。
Map 集合是由两个集合构成的,一个是键(key)集合,一个是值(value)集合:
Map 集合中的键和值是成对出现的。
下图所示是一个球队的 Map 集合。键是队员编号,不能重复。值是球员人名,可以重复。

图 1 Map集合
Java 中描述 Map 集合的接口是 Map,它的直接实现类主要是 HashMap 和 TreeMap 等,HashMap 是基于散列表数据结构的实现。
3) 查看集合
4) 遍历集合
示例代码如下:
代码第 ① 处创建一个名为 players 的 Map 集合对象,使用 HashMap 类实现。Map<Integer,String> 表示这个集合的键是整数类型(球员编号),而值是字符串类型(球员姓名)。
代码第 ② 处使用 players.put(key, value) 方法向集合中添加键值对。在这里添加了三个键值对:(10,"John")、(12,"Mike") 和 (11,"Amy")。这些键值对表示球员的编号和对应的姓名。
代码第 ③ 处添加了一个新的键值对,键是 11,值是 "Tom"。由于之前已经有键为 11 的键值对存在,因此这个操作会更新键为 11 的值为 "Tom",覆盖原有的值 "Amy"。
代码第 ④ 处使用 players.get(11) 方法根据键 11 获取对应的值,即球员编号为 11 的球员姓名。由于之前的操作已经将键 11 的值更新为 "Tom",因此输出结果为 "Tom"。
代码第 ⑤ 处输出整个 players 集合的内容。输出结果为 {10=John, 11=Tom, 12=Mike}。请注意,HashMap 并不保证元素的顺序,因此输出的顺序可能与添加的顺序不一致。如果需要保持元素的插入顺序,可以使用 LinkedHashMap。
示例代码如下:
代码第 ① 处使用 players.keySet() 方法获取键的集合,然后使用增强 for 循环遍历键的集合。在循环中,变量 key 依次表示集合中的每个键,通过 players.get(key) 方法获取对应的值,即球员姓名。
代码第 ② 处使用 players.values() 方法获取值的集合,然后使用增强 for 循环遍历值的集合。在循环中,变量 value 依次表示集合中的每个值,即球员姓名。
代码第 ③ 处使用 players.entrySet() 方法获取键值对的集合(Entry Set),然后使用增强 for 循环遍历键值对的集合。在循环中,变量 entry 依次表示集合中的每个键值对。通过 entry.getKey() 方法获取键(即球员编号),通过 entry.getValue() 方法获取值(即球员姓名)。
这样,通过不同的遍历方式,可以方便地获取 Map 集合中的键、值或键值对,并进行相应的操作。
我们将学习 Map 集合的以下常用方法:
同时,我们还会学习如何遍历 Map 集合,常用的遍历方式如下:
通过掌握这些方法和遍历方式,我们可以灵活地使用 Map 集合来存储和操作键值对数据,实现更复杂的功能和逻辑。
参考代码如下:
Map 集合是由两个集合构成的,一个是键(key)集合,一个是值(value)集合:
- 键集合是 Set 类型,因此不能有重复的元素;
- 值集合是 Collection 类型,可以有重复的元素。
Map 集合中的键和值是成对出现的。
下图所示是一个球队的 Map 集合。键是队员编号,不能重复。值是球员人名,可以重复。

图 1 Map集合
Java 中描述 Map 集合的接口是 Map,它的直接实现类主要是 HashMap 和 TreeMap 等,HashMap 是基于散列表数据结构的实现。
Java Map接口的常用方法
Map 集合中包含两个集合(键和值),所以操作起来比较麻烦。Map 接口提供了很多方法来管理和操作集合。其主要的方法如下。1) 操作元素
- get(Object key):返回指定键所对应的值;如果 Map 集合中不包含该键值对,则返回 null;
- put(Object key, Object value):将指定键值对添加到集合中;
- remove(Object key):移除键值对;
- clear():移除 Map 集合中的所有键值对。
2) 判断元素
- isEmpty():判断 Map 集合中是否有键值对,如果没有,返回 true,如果有,返回 false;
- containsKey(Object key):判断键集合中是否包含指定元素,如果包含,返回 true,如果不包含,返回 false;
- containsValue(Object value):判断值集合中是否包含指定元素,如果包含,返回 true,如果不包含,返回 false。
3) 查看集合
- keySet():返回 Map 中的所有键集合,返回值是 Set 类型;
- values():返回 Map 中的所有值集合,返回值是 Collection 类型;
- size():返回 Map 集合中键值的对数。
4) 遍历集合
- forEach():遍历集合。
示例代码如下:
import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args) { // 创建一个 Map 集合存储球员编号和姓名 Map<Integer, String> players = new HashMap<>(); // ① players.put(10, "John"); players.put(12, "Mike"); players.put(11, "Amy"); // ② players.put(11, "Tom"); // ③ System.out.println("11 编号球员:" + players.get(11)); // ④ System.out.println(players); // ⑤ } }程序的运行结果如下:
11 编号球员:Tom
{10=John, 12=Mike, 11=Tom}
代码第 ① 处创建一个名为 players 的 Map 集合对象,使用 HashMap 类实现。Map<Integer,String> 表示这个集合的键是整数类型(球员编号),而值是字符串类型(球员姓名)。
代码第 ② 处使用 players.put(key, value) 方法向集合中添加键值对。在这里添加了三个键值对:(10,"John")、(12,"Mike") 和 (11,"Amy")。这些键值对表示球员的编号和对应的姓名。
代码第 ③ 处添加了一个新的键值对,键是 11,值是 "Tom"。由于之前已经有键为 11 的键值对存在,因此这个操作会更新键为 11 的值为 "Tom",覆盖原有的值 "Amy"。
代码第 ④ 处使用 players.get(11) 方法根据键 11 获取对应的值,即球员编号为 11 的球员姓名。由于之前的操作已经将键 11 的值更新为 "Tom",因此输出结果为 "Tom"。
代码第 ⑤ 处输出整个 players 集合的内容。输出结果为 {10=John, 11=Tom, 12=Mike}。请注意,HashMap 并不保证元素的顺序,因此输出的顺序可能与添加的顺序不一致。如果需要保持元素的插入顺序,可以使用 LinkedHashMap。
Java遍历集合
Map 集合遍历与 List 和 Set 集合不同,Map 有两个集合,因此遍历时可以只遍历值的集合,也可以只遍历键的集合,还可以同时遍历键值对。这些遍历过程都可以使用 Java 风格 for 循环实现。示例代码如下:
import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args) { Map<Integer, String> players = new HashMap<>(); players.put(10, "John"); players.put(12, "Mike"); players.put(11, "Amy"); // 遍历键的集合 System.out.println("遍历键的集合:"); for (Integer key : players.keySet()) { // ① System.out.println("球员编号:" + key + ", 球员姓名:" + players.get(key)); } // 遍历值的集合 System.out.println("\n遍历值的集合:"); for (String value : players.values()) { // ② System.out.println("球员姓名:" + value); } // 同时遍历键值对 System.out.println("\n同时遍历键值对:"); for (Map.Entry<Integer, String> entry : players.entrySet()) { // ③ System.out.println("球员编号:" + entry.getKey() + ", 球员姓名:" + entry.getValue()); } } }程序运行结果为:
遍历键的集合:
球员编号:10, 球员姓名:John
球员编号:12, 球员姓名:Mike
球员编号:11, 球员姓名:Amy
遍历值的集合:
球员姓名:John
球员姓名:Mike
球员姓名:Amy
同时遍历键值对:
球员编号:10, 球员姓名:John
球员编号:12, 球员姓名:Mike
球员编号:11, 球员姓名:Amy
代码第 ① 处使用 players.keySet() 方法获取键的集合,然后使用增强 for 循环遍历键的集合。在循环中,变量 key 依次表示集合中的每个键,通过 players.get(key) 方法获取对应的值,即球员姓名。
代码第 ② 处使用 players.values() 方法获取值的集合,然后使用增强 for 循环遍历值的集合。在循环中,变量 value 依次表示集合中的每个值,即球员姓名。
代码第 ③ 处使用 players.entrySet() 方法获取键值对的集合(Entry Set),然后使用增强 for 循环遍历键值对的集合。在循环中,变量 entry 依次表示集合中的每个键值对。通过 entry.getKey() 方法获取键(即球员编号),通过 entry.getValue() 方法获取值(即球员姓名)。
这样,通过不同的遍历方式,可以方便地获取 Map 集合中的键、值或键值对,并进行相应的操作。
总结
Map 集合是一种用于存储键值对的数据结构,它允许我们使用键来快速查找对应的值。Map 集合在 Java 中有多种实现,常见的有 HashMap、TreeMap 和 LinkedHashMap 等。我们将学习 Map 集合的以下常用方法:
- put(K key, V value):向 Map 中添加键值对;
- get(Object key):根据键获取对应的值;
- containsKey(Object key):判断 Map 中是否包含指定的键;
- containsValue(Object value):判断 Map 中是否包含指定的值;
- remove(Object key):根据键删除对应的键值对;
- size():获取 Map 中键值对的数量。
同时,我们还会学习如何遍历 Map 集合,常用的遍历方式如下:
- 遍历键的集合:使用 keySet() 方法获取所有的键,然后使用增强 for 循环遍历键,再根据键获取对应的值;
- 遍历值的集合:使用 values() 方法获取所有的值,然后使用增强 for 循环遍历值;
- 同时遍历键值对:使用 entrySet() 方法获取所有的键值对,然后使用增强 for 循环遍历键值对,分别获取键和值;
通过掌握这些方法和遍历方式,我们可以灵活地使用 Map 集合来存储和操作键值对数据,实现更复杂的功能和逻辑。
参考代码如下:
import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args) { // 创建一个 Map 集合,用于存储学生姓名和对应的成绩 Map<String, Integer> scores = new HashMap<>(); // 向集合中添加学生信息 scores.put("Alice", 85); scores.put("Bob", 90); scores.put("Charlie", 78); scores.put("David", 95); // 根据学生姓名查找对应的成绩 String studentName = "Bob"; if (scores.containsKey(studentName)) { int score = scores.get(studentName); System.out.println(studentName + "的成绩是:" + score); } else { System.out.println("找不到学生:" + studentName); } // 遍历集合,输出所有学生的成绩 System.out.println("\n所有学生的成绩:"); for (String name : scores.keySet()) { int score = scores.get(name); System.out.println(name + "的成绩是:" + score); } } }程序的运行结果如下:
Bob的成绩是:90
所有学生的成绩:
Alice的成绩是:85
Bob的成绩是:90
Charlie的成绩是:78
David的成绩是:95