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 類可以對鍵物件進行排序,這裡不再贅述。