首页 > 编程笔记 > Java笔记 阅读:12

Java Map集合的用法(附带实例)

Java 中的 Map(映射)集合表示一种非常复杂的集合,允许按照某个键来访问元素。

Map 集合是由两个集合构成的,一个是键(key)集合,一个是值(value)集合:
Map 集合中的键和值是成对出现的。

下图所示是一个球队的 Map 集合。键是队员编号,不能重复。值是球员人名,可以重复。


图 1 Map集合

Java 中描述 Map 集合的接口是 Map,它的直接实现类主要是 HashMap 和 TreeMap 等,HashMap 是基于散列表数据结构的实现。

Java Map接口的常用方法

Map 集合中包含两个集合(键和值),所以操作起来比较麻烦。Map 接口提供了很多方法来管理和操作集合。其主要的方法如下。

1) 操作元素

2) 判断元素


3) 查看集合
4) 遍历集合

示例代码如下:
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 集合的以下常用方法:
同时,我们还会学习如何遍历 Map 集合,常用的遍历方式如下:
通过掌握这些方法和遍历方式,我们可以灵活地使用 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

相关文章