|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
K
- 此映射所維護的鍵的型別V
- 映射值的型別public interface Map<K,V>
將鍵映射到值的物件。一個映射不能包含重複的鍵;每個鍵最多只能映射到一個值。
此介面取代 Dictionary 類別,後者完全是一個抽象類別,而不是一個介面。
Map 介面提供三種collection 視圖,允許以鍵集、值集或鍵-值映射關係集的形式查看某個映射的內容。映射順序 定義為迭代器在映射的 collection 視圖上返回其元素的順序。某些映射實作可明確保證其順序,如 TreeMap 類別;另一些映射實作則不保證順序,如 HashMap 類別。
註:將可變物件用作映射鍵時必須格外小心。當物件是映射中某個鍵時,如果以影響 equals 比較的方式更改了物件的值,則映射的行為將是不確定的。此項禁止的一種特殊情況是不允許某個映射將自身作為一個鍵包含。雖然允許某個映射將自身作為值包含,但請格外小心:在這樣的映射上 equals 和 hashCode 方法的定義將不再是明確的。
所有通用的映射實作類別應該提供兩個「標準的」建構子:一個 void(無參數)建構子,用於創建空映射;一個是帶有單個 Map 型別參數的建構子,用於創建一個與其參數具有相同鍵-值映射關係的新映射。實際上,後一個建構子允許使用者複製任意映射,產生所需類別的一個等價映射。儘管無法強制執行此建議(因為介面不能包含建構子),但是 JDK 中所有通用的映射實作都遵從它。
此介面中包含的「破壞」方法可修改其操作的映射,如果此映射不支持該操作,這些方法將拋出 UnsupportedOperationException。如果是這樣,那麼在調用對映射無效時,這些方法可以(但不要求)拋出 UnsupportedOperationException。例如,如果某個不可修改的映射(其映射關係是「重疊」的)為空,則對該映射調用 putAll(Map)
方法時,可以(但不要求)拋出異常。
某些映射實作對可能包含的鍵和值有所限制。例如,某些實作禁止 null 鍵和值,另一些則對其鍵的型別有限制。嘗試插入不合格的鍵或值將拋出一個未經檢查的異常,通常是 NullPointerException 或 ClassCastException。試圖查詢是否存在不合格的鍵或值可能拋出異常,或者返回 false;某些實作將表現出前一種行為,而另一些則表現後一種。一般來說,試圖對不合格的鍵或值執行操作且該操作的完成不會導致不合格的元素被插入映射中時,將可能拋出一個異常,也可能操作成功,這取決於實作本身。這樣的異常在此介面的規範中標記為「可選」。
此介面是 Java Collections Framework 的成員。
Collections Framework 介面中的很多方法是根據 equals
方法定義的。例如,containsKey(Object key)
方法的規範中寫道:「當且僅當此映射包含針對滿足 (key==null ? k==null : key.equals(k)) 的鍵 k 的映射關係時,返回 true」。不 應將此規範解釋為:調用具有非空(null)參數 key 的 Map.containsKey 將導致對任意的鍵 k 調用 key.equals(k)。實作可隨意進行優化,以避免調用 equals,例如,可首先比較兩個鍵的雜湊碼(Object.hashCode()
規範保證雜湊碼不相等的兩個物件不會相等)。一般來說,只要實作者認為合適,各種 Collections Framework 介面的實作可隨意利用底層 Object
方法的指定行為。
HashMap
,
TreeMap
,
Hashtable
,
SortedMap
,
Collection
,
Set
巢狀類別摘要 | |
---|---|
static interface |
Map.Entry<K,V>
映射項(鍵-值對)。 |
方法摘要 | |
---|---|
void |
clear()
從此映射中移除所有映射關係(可選操作)。 |
boolean |
containsKey(Object key)
如果此映射包含指定鍵的映射關係,則返回 true。 |
boolean |
containsValue(Object value)
如果此映射將一個或多個鍵映射到指定值,則返回 true。 |
Set<Map.Entry<K,V>> |
entrySet()
返回此映射中包含的映射關係的 Set 視圖。 |
boolean |
equals(Object o)
比較指定的物件與此映射是否相等。 |
V |
get(Object key)
返回指定鍵所映射的值;如果此映射不包含該鍵的映射關係,則返回 null 。 |
int |
hashCode()
返回此映射的雜湊碼值。 |
boolean |
isEmpty()
如果此映射未包含鍵-值映射關係,則返回 true。 |
Set<K> |
keySet()
返回此映射中包含的鍵的 Set 視圖。 |
V |
put(K key,
V value)
將指定的值與此映射中的指定鍵關聯(可選操作)。 |
void |
putAll(Map<? extends K,? extends V> m)
從指定映射中將所有映射關係複製到此映射中(可選操作)。 |
V |
remove(Object key)
如果存在一個鍵的映射關係,則將其從此映射中移除(可選操作)。 |
int |
size()
返回此映射中的鍵-值映射關係數。 |
Collection<V> |
values()
返回此映射中包含的值的 Collection 視圖。 |
方法詳細資訊 |
---|
int size()
boolean isEmpty()
boolean containsKey(Object key)
key
- 測試是否存在於此映射中的鍵
ClassCastException
- 如果該鍵對於此映射是不合適的型別(可選)
NullPointerException
- 如果指定鍵為 null 並且此映射不允許 null 鍵(可選)boolean containsValue(Object value)
value
- 測試是否存在於此映射中的值
ClassCastException
- 如果該值對於此映射是不合適的型別(可選)
NullPointerException
- 如果指定值為 null 並且此映射不允許 null 值(可選)V get(Object key)
null
。
更確切地講,如果此映射包含滿足 (key==null ? k==null :
key.equals(k))
的鍵 k
到值 v
的映射關係,則此方法返回 v
;否則返回 null
。(最多只能有一個這樣的映射關係)。
如果此映射允許 null 值,則返回 null
值並不一定 表示該映射不包含該鍵的映射關係;也可能該映射將該鍵顯示地映射到 null
。使用 containsKey
操作可區分這兩種情況。
key
- 要返回其關聯值的鍵
null
ClassCastException
- 如果該鍵對於此映射是不合適的型別(可選)
NullPointerException
- 如果指定鍵為 null 並且此映射不允許 null 鍵(可選)V put(K key, V value)
m.containsKey(k)
返回 true 時,才能說映射 m 套件含鍵 k 的映射關係)。
key
- 與指定值關聯的鍵value
- 與指定鍵關聯的值
UnsupportedOperationException
- 如果此映射不支持 put 操作
ClassCastException
- 如果指定鍵或值的類別不允許將其存儲在此映射中
NullPointerException
- 如果指定鍵或值為 null,並且此映射不允許 null 鍵或值
IllegalArgumentException
- 如果指定鍵或值的某些屬性不允許將其存儲在此映射中V remove(Object key)
(key==null ? k==null :key.equals(k))
的鍵 k 到值 v 的映射關係,則移除該映射關係。(該映射最多只能包含一個這樣的映射關係。)
返回此映射中以前關聯該鍵的值,如果此映射不包含該鍵的映射關係,則返回 null。
如果此映射允許 null 值,則返回 null 值並不一定 表示該映射不包含該鍵的映射關係;也可能該映射將該鍵顯示地映射到 null。
調用返回後,此映射將不再包含指定鍵的映射關係。
key
- 從映射中移除其映射關係的鍵
UnsupportedOperationException
- 如果此映射不支持 remove 操作
ClassCastException
- 如果該鍵對於此映射是不合適的型別(可選)
NullPointerException
- 如果指定鍵為 null 並且此映射不允許 null 鍵(可選)void putAll(Map<? extends K,? extends V> m)
put(k, v)
。如果正在進行此操作的同時修改了指定的映射,則此操作的行為是不確定的。
m
- 要存儲在此映射中的映射關係
UnsupportedOperationException
- 如果此映射不支持 putAll 操作
ClassCastException
- 如果指定映射中的鍵或值的類別不允許將其存儲在此映射中
NullPointerException
- 如果指定映射為 null,或者此映射不允許 null 鍵或值,並且指定的映射包含 null 鍵或值
IllegalArgumentException
- 如果指定映射中的鍵或值的某些屬性不允許將其存儲在此映射中void clear()
UnsupportedOperationException
- 如果此映射不支持 clear 操作Set<K> keySet()
Set
視圖。該 set 受映射支持,所以對映射的更改可在此 set 中反映出來,反之亦然。如果對該 set 進行迭代的同時修改了映射(通過迭代器自己的 remove 操作除外),則迭代結果是不確定的。set 支持元素移除,通過 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作可從映射中移除相應的映射關係。它不支持 add 或 addAll 操作。
Collection<V> values()
Collection
視圖。該 collection 受映射支持,所以對映射的更改可在此 collection 中反映出來,反之亦然。如果對該 collection 進行迭代的同時修改了映射(通過迭代器自己的 remove 操作除外),則迭代結果是不確定的。collection 支持元素移除,通過 Iterator.remove、Collection.remove、removeAll、retainAll 和 clear 操作可從映射中移除相應的映射關係。它不支持 add 或 addAll 操作。
Set<Map.Entry<K,V>> entrySet()
Set
視圖。該 set 受映射支持,所以對映射的更改可在此 set 中反映出來,反之亦然。如果對該 set 進行迭代的同時修改了映射(通過迭代器自己的 remove 操作,或者通過對迭代器返回的映射項執行 setValue 操作除外),則迭代結果是不確定的。set 支持元素移除,通過 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作可從映射中移除相應的映射關係。它不支持 add 或 addAll 操作。
boolean equals(Object o)
Object
中的 equals
o
- 要與此映射進行相等性比較的物件
Object.hashCode()
,
Hashtable
int hashCode()
Object.hashCode()
常規協定的要求。
Object
中的 hashCode
Map.Entry.hashCode()
,
Object.equals(Object)
,
equals(Object)
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。