Java 从入门到进阶之路(二十七)

在之前的文章我们介绍了一下 Java 中的  集合框架中的Collection,本章我们来看一下 Java 集合框架中的 Map。

Map 接口定义的集合又称查找表,用于存储所谓“Key-Value”映射对,Key 可以看成是 Value 的索引,作为 Key 的对象在集合中不可以重复。

根据内部数据结构的不同,Map 接口有多种实现类,其中常用的有内部为 hash 表实现的 HashMap 和内部为排序二叉树实现的 TreeMap,在开发过程中我们常用到的是 Hashmap。

 1 import java.util.HashMap;
 2 import java.util.Map;
 3 
 4 /**
 5  * java.util.Map
 6  * Map 看起来像是一个多行两列的表格
 7  * 以 key-value 对的形式存放元素
 8  * 以 Map 中 key 不允许重复(重复是依靠 key 的 equals 判断)
 9  * 常用的实现类为 HashMap
10  */
11 public class Main {
12     public static void main(String[] args) {
13         Map<String, Integer> map = new HashMap<String, Integer>();
14         /**
15          * V put(K k, V v)
16          * 将给定的 key-value 对存入 Map
17          * 顺序不按照给定的顺序排
18          * 由于 Map 要求 key 不允许重复,所以使用 Map
19          * 已有的 key 存入一个新的 value 时的操作是
20          * 替换 value,那么返回值为该 key 原来对应的 value,
21          * 若是一个新的 key,则返回为 null
22          */
23         map.put("语文", 90);
24         map.put("数学", 93);
25         map.put("英语", 80);
26         map.put("化学", 99);
27         System.out.println(map); // {数学=93, 化学=99, 语文=90, 英语=80}
28 
29         Integer value = map.put("物理", 60); // 新 key,返回 null
30         System.out.println(value); // null
31         System.out.println(map); // {物理=60, 数学=93, 化学=99, 语文=90, 英语=80}
32 
33         value = map.put("语文", 88); // key 相同替换原来的 value
34         System.out.println(value); // 90
35         System.out.println(map); // {物理=60, 数学=93, 化学=99, 语文=88, 英语=80}
36 
37         /**
38          * V get(K k)
39          * 根据给定的 key 获取对应的 value
40          * 若当前 Map 中没有给定的 key,则返回为 null
41          */
42         value = map.get("数学");
43         System.out.println(value); // 93
44         value = map.get("生物");
45         System.out.println(value); // null
46 
47         /**
48          * V remove(K k)
49          * 删除给定的 key 所对应的 key-value 对
50          * 返回值为被删除的 key-value 对中的 value
51          */
52         value = map.remove("数学");
53         System.out.println(value); // 93
54         System.out.println(map); // {物理=60, 化学=99, 语文=88, 英语=80}
55     }
56 }

在上面的代码中,我们实现了 Map 的基本操作增删改查。接下来我们再来看一下 Map 的循环遍历:

 1 import java.util.Collection;
 2 import java.util.HashMap;
 3 import java.util.Map;
 4 import java.util.Set;
 5 
 6 /**
 7  * 遍历 Map
 8  * 遍历 Map 有三种方式:
 9  * 遍历所有的 key
10  * 遍历所有的 key-value 对
11  * 遍历所有的 value(相对不常用)
12  */
13 public class Main {
14     public static void main(String[] args) {
15         Map<String, Integer> map = new HashMap<String, Integer>();
16         map.put("语文", 90);
17         map.put("数学", 93);
18         map.put("英语", 80);
19         map.put("化学", 99);
20         System.out.println(map.size()); // 4
21         System.out.println(map); // {数学=93, 化学=99, 语文=90, 英语=80}
22 
23         /**
24          * 遍历所有的 key
25          * Set<K> keySet()
26          * 该方法会将当前 Map 中所有的 key 存入一个Set 集合后返回
27          * 那么遍历该集合就等于遍历了所有的 key
28          */
29         Set<String> keySet = map.keySet();
30         for (String string : keySet) {
31             System.out.println(string); // 数学 化学 语文 英语
32         }
33 
34         /**
35          * 遍历每一组键值对
36          * Map 中每一组键值对都是由 Map 的内部类:
37          * java.util.Map.Entry 的一个实例表示的
38          * Entry 有两个方法:getKey,getValue
39          * 可以分别获取这一组键值对中的 key 与 value
40          *
41          * set<Entry> entrySet
42          * 该方法会将 Map 中每一组键值对(Entry 实例)
43          * 存入一个 Set 集合后返回
44          */
45         Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
46         for (Map.Entry<String, Integer> entry : entrySet) {
47             String key = entry.getKey();
48             Integer value = entry.getValue();
49             System.out.println(key + ": " + value); // 数学: 93, 化学: 99, 语文: 90, 英语: 80
50         }
51 
52         /**
53          * 遍历所有的 value
54          * Collection values
55          * 该方法会将当前 Map 中所有的 value 存入一个集合后返回
56          */
57         Collection<Integer> values = map.values();
58         for (Integer value : values) {
59             System.out.println(value); // 93 99 90 80
60         }
61     }
62 }

在上面的代码中,我们实现了 Map 的遍历循环。

posted @ 2020-07-01 10:19  丰寸  阅读(206)  评论(0编辑  收藏  举报