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 的遍歷循環。

Tags: