地圖
外觀
| 導航 聚合 主題: |
除了 java.util.Collection 介面,Java JDK 還有 java.util.Map 介面。它有時也被稱為關聯陣列或字典。地圖定義了鍵值對映。Map 介面的實現不包含物件集合。相反,它們包含鍵->值對映集合。可以將其視為一個數組,其中索引不需要是整數。
程式碼部分 5.17:地圖的使用。
import java.util.Map;
import java.util.Hashtable;
...
Map map = new Hashtable();
...
map.put(key, value);
|
如果你需要在一個 Map 中將相關物件放在一起,其中你可以
- 透過鍵物件訪問元素
- 將一個物件對映到另一個
圖 5.6:地圖介面。
|
- java.util.Map<K,V>
- 將鍵對映到值。地圖不能包含重複的鍵;每個鍵最多可以對映到一個值。Map 介面提供了三個集合檢視,允許將地圖的內容視為鍵集、值集合或鍵值對映集。鍵通常是不可變物件。但是,值物件可以是可變物件。
- java.util.SortedMap<K,V>
- 與 Map 介面相同,另外地圖中的鍵已排序。
在上面的示例中,相同的操作使用兩個不同的地圖實現完成
|
|
我們看到只有 TreeMap 對鍵進行了排序。注意泛型。Map 介面很棘手。get() 和 remove() 方法不是泛型的。這意味著你必須注意鍵的型別
|
|
remove() 呼叫沒有做任何事情,因為 "2" 是一個 String,而不是一個 Integer,因此沒有找到並刪除任何鍵值對。
Map 介面有以下實現
圖 5.7:地圖類圖。
|
- java.util.TreeMap<E>
- 保證地圖將按升序鍵排序,根據鍵類的自然順序排序,非同步。
- java.util.Hashtable<E>
- 同步,null 不能用作鍵
- java.util.HashMap<E>
- 大致相當於 Hashtable,除了它是非同步的並且允許 null
- java.util.concurrent.ConcurrentHashMap
- 與 Hashtable 相同,另外檢索操作(包括 get)通常不會阻塞,因此可能與更新操作(包括 put 和 remove)重疊。
- java.util.WeakHashMap<E>
- WeakHashMap 中的條目將在其鍵不再正常使用時自動刪除。非同步。
- java.util.LinkedHashMap<E>
- 此連結串列定義了迭代順序,通常是鍵首次插入地圖的順序(首次插入順序)。注意,如果將鍵重新插入地圖,插入順序不會受到影響。
- java.util.IdentityHashMap
- 此類使用雜湊表實現 Map 介面,在比較鍵(和值)時使用引用相等代替物件相等。換句話說,在 IdentityHashMap 中,兩個鍵 k1 和 k2 被認為相等,當且僅當
if (k1==k2)。(在正常的 Map 實現(如 HashMap)中,兩個鍵 k1 和 k2 被認為相等,當且僅當if (k1==null ? k2==null : k1.equals(k2))。)非同步。 - java.util.EnumMap
- EnumMap 中的所有鍵必須來自建立地圖時顯式或隱式指定的單個列舉型別。EnumMap 在內部表示為陣列。這種表示非常緊湊且高效。非同步。
下表列出了所有同步的地圖類
| 同步 | 非同步 |
|---|---|
| java.util.TreeMap | |
| java.util.Hashtable java.util.concurrent.ConcurrentHashMap |
java.util.HashMap |
| java.util.LinkedHashMap | |
| java.util.IdentityHashMap | |
| java.util.EnumMap |


