1. 程式人生 > 實用技巧 >Java 從入門到進階之路(二十七)

Java 從入門到進階之路(二十七)

在之前的文章我們介紹了一下 Java 中的 集合框架中的Collection,本章我們來看一下 Java 集合框架中的 Map。

Map 介面定義的集合又稱查詢表,用於儲存所謂“Key-Value”對映對,Key 可以看成是 Value 的索引,作為 Key 的物件在集合中不可以重複。

根據內部資料結構的不同,Map 介面有多種實現類,其中常用的有內部為 hash 表實現的 HashMap 和內部為排序二叉樹實現的 TreeMap,在開發過程中我們常用到的是 Hashmap。

 import java.util.HashMap;
import java.util.Map; /**
* java.util.Map
* Map 看起來像是一個多行兩列的表格
* 以 key-value 對的形式存放元素
* 以 Map 中 key 不允許重複(重複是依靠 key 的 equals 判斷)
* 常用的實現類為 HashMap
*/
public class Main {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
/**
* V put(K k, V v)
* 將給定的 key-value 對存入 Map
* 順序不按照給定的順序排
* 由於 Map 要求 key 不允許重複,所以使用 Map
* 已有的 key 存入一個新的 value 時的操作是
* 替換 value,那麼返回值為該 key 原來對應的 value,
* 若是一個新的 key,則返回為 null
*/
map.put("語文", 90);
map.put("數學", 93);
map.put("英語", 80);
map.put("化學", 99);
System.out.println(map); // {數學=93, 化學=99, 語文=90, 英語=80} Integer value = map.put("物理", 60); // 新 key,返回 null
System.out.println(value); // null
System.out.println(map); // {物理=60, 數學=93, 化學=99, 語文=90, 英語=80} value = map.put("語文", 88); // key 相同替換原來的 value
System.out.println(value); //
System.out.println(map); // {物理=60, 數學=93, 化學=99, 語文=88, 英語=80} /**
* V get(K k)
* 根據給定的 key 獲取對應的 value
* 若當前 Map 中沒有給定的 key,則返回為 null
*/
value = map.get("數學");
System.out.println(value); //
value = map.get("生物");
System.out.println(value); // null /**
* V remove(K k)
* 刪除給定的 key 所對應的 key-value 對
* 返回值為被刪除的 key-value 對中的 value
*/
value = map.remove("數學");
System.out.println(value); //
System.out.println(map); // {物理=60, 化學=99, 語文=88, 英語=80}
}
}

在上面的程式碼中,我們實現了 Map 的基本操作增刪改查。接下來我們再來看一下 Map 的迴圈遍歷:

 import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set; /**
* 遍歷 Map
* 遍歷 Map 有三種方式:
* 遍歷所有的 key
* 遍歷所有的 key-value 對
* 遍歷所有的 value(相對不常用)
*/
public class Main {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("語文", 90);
map.put("數學", 93);
map.put("英語", 80);
map.put("化學", 99);
System.out.println(map.size()); //
System.out.println(map); // {數學=93, 化學=99, 語文=90, 英語=80} /**
* 遍歷所有的 key
* Set<K> keySet()
* 該方法會將當前 Map 中所有的 key 存入一個Set 集合後返回
* 那麼遍歷該集合就等於遍歷了所有的 key
*/
Set<String> keySet = map.keySet();
for (String string : keySet) {
System.out.println(string); // 數學 化學 語文 英語
} /**
* 遍歷每一組鍵值對
* Map 中每一組鍵值對都是由 Map 的內部類:
* java.util.Map.Entry 的一個例項表示的
* Entry 有兩個方法:getKey,getValue
* 可以分別獲取這一組鍵值對中的 key 與 value
*
* set<Entry> entrySet
* 該方法會將 Map 中每一組鍵值對(Entry 例項)
* 存入一個 Set 集合後返回
*/
Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
for (Map.Entry<String, Integer> entry : entrySet) {
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key + ": " + value); // 數學: 93, 化學: 99, 語文: 90, 英語: 80
} /**
* 遍歷所有的 value
* Collection values
* 該方法會將當前 Map 中所有的 value 存入一個集合後返回
*/
Collection<Integer> values = map.values();
for (Integer value : values) {
System.out.println(value); // 93 99 90 80
}
}
}

在上面的程式碼中,我們實現了 Map 的遍歷迴圈。