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