Java Map集合詳解

2020-07-16 10:05:16
Map 是一種鍵-值對(key-value)集合,Map 集合中的每一個元素都包含一個鍵物件和一個值物件。其中,鍵物件不允許重複,而值物件可以重複,並且值物件還可以是 Map 型別的,就像陣列中的元素還可以是陣列一樣。

Map 介面主要有兩個實現類:HashMap 類和 TreeMap 類。其中,HashMap 類按雜湊演算法來存取鍵物件,而 TreeMap 類可以對鍵物件進行排序。

Map 介面中提供的常用方法如表 1 所示。

表 1 Map介面的常用方法
方法名稱 說明
V get(Object key) 返回 Map 集合中指定鍵物件所對應的值。V 表示值的資料型別
V put(K key, V value) 向 Map 集合中新增鍵-值對,返回 key 以前對應的 value,如果沒有, 則返回 null
V remove(Object key) 從 Map 集合中刪除 key 對應的鍵-值對,返回 key 對應的 value,如果沒有,則返回null
Set entrySet() 返回 Map 集合中所有鍵-值對的 Set 集合,此 Set 集合中元素的資料型別為 Map.Entry
Set keySet() 返回 Map 集合中所有鍵物件的 Set 集合

例 1

每名學生都有屬於自己的唯一編號,即學號。在畢業時需要將該學生的資訊從系統中移除。

下面編寫 Java 程式,使用 HashMap 來儲存學生資訊,其鍵為學生學號,值為姓名。畢業時,需要使用者輸入學生的學號,並根據學號進行刪除操作。具體的實現程式碼如下:
public class Test09 {
    public static void main(String[] args) {
        HashMap users = new HashMap();
        users.put("11", "張浩太"); // 將學生資訊鍵值對儲存到Map中
        users.put("22", "劉思誠");
        users.put("33", "王強文");
        users.put("44", "李國量");
        users.put("55", "王路路");
        System.out.println("******** 學生列表 ********");
        Iterator it = users.keySet().iterator();
        while (it.hasNext()) {
            // 遍歷 Map
            Object key = it.next();
            Object val = users.get(key);
            System.out.println("學號:" + key + ",姓名:" + val);
        }
        Scanner input = new Scanner(System.in);
        System.out.println("請輸入要刪除的學號:");
        int num = input.nextInt();
        if (users.containsKey(String.valueOf(num))) { // 判斷是否包含指定鍵
            users.remove(String.valueOf(num)); // 如果包含就刪除
        } else {
            System.out.println("該學生不存在!");
        }
        System.out.println("******** 學生列表 ********");
        it = users.keySet().iterator();
        while (it.hasNext()) {
            Object key = it.next();
            Object val = users.get(key);
            System.out.println("學號:" + key + ",姓名:" + val);
        }
    }
}
在該程式中,兩次使用 while 迴圈遍歷 HashMap 集合。當有學生畢業時,使用者需要輸入該學生的學號,根據學號使用 HashMap 類的 remove() 方法將對應的元素刪除。程式執行結果如下所示。
******** 學生列表 ********
學號:44,姓名:李國量
學號:55,姓名:王路路
學號:22,姓名:劉思誠
學號:33,姓名:王強文
學號:11,姓名:張浩太
請輸入要刪除的學號:
22
******** 學生列表 ********
學號:44,姓名:李國量
學號:55,姓名:王路路
學號:33,姓名:王強文
學號:11,姓名:張浩太
******** 學生列表 ********
學號:44,姓名:李國量
學號:55,姓名:王路路
學號:22,姓名:劉思誠
學號:33,姓名:王強文
學號:11,姓名:張浩太
請輸入要刪除的學號:
44
******** 學生列表 ********
學號:55,姓名:王路路
學號:22,姓名:劉思誠
學號:33,姓名:王強文
學號:11,姓名:張浩太

注意:TreeMap 類的使用方法與 HashMap 類相同,唯一不同的是 TreeMap 類可以對鍵物件進行排序,這裡不再贅述。