Java IdentityHashMap類
這個類實現了AbstractMap。它類似於HashMap的不同之處在於它比較元素時使用引用相等。
這個類不是一個通用的Map實現。雖然這個類實現了Map接口,它有意違反Map的常規協定,在比較對象時,它要求使用equals方法。
這個類隻有在極少數情況下,其中引用相等語義都需要設計使用。
這個類提供了穩定的性能為基本操作(get和put),假設係統標識哈希函數 (System.identityHashCode(Object)) 適當分散桶中的元素。
這個類有一個調整參數(影響性能,但不是語義):預期最大尺寸。這個參數是map有望保持鍵 - 值映射的最大數目。
類IdentityHashMap所支持三種構造函數。第一種形式構造一個新的空標識哈希有一個默認的最大預期大小(21)映射:
IdentityHashMap()
第二種形式構造指定期望的最大尺寸的新的空映射:
IdentityHashMap(int expectedMaxSize)
第三種形式構造包含指定映射中鍵 - 值映射關係的新標識哈希映射:
IdentityHashMap(Map m)
除了從它的父類繼承的方法,定義IdentityHashMap所下麵的方法:
SN | 方法及描述 |
---|---|
1 |
void clear() 從此映射中移除所有映射. |
2 |
Object clone() 返回此標識哈希映射的淺表副本:鍵和值本身不被複製. |
3 |
boolean containsKey(Object key) 測試指定的對象引用是否為此標識哈希映射中的鍵. |
4 |
boolean containsValue(Object value) 測試指定的對象引用是否是一個值為此標識哈希映射. |
5 |
Set entrySet() 返回的映射此映射中包含了集合視圖. |
6 |
boolean equals(Object o) 比較指定對象與此映射是否相等. |
7 |
Object get(Object key) 返回指定鍵映射在此標識哈希映射值,或者如果映射不包含此鍵返回null. |
8 |
int hashCode() 返回此映射的哈希碼值. |
9 |
boolean isEmpty() 如果此標識哈希映射不包含鍵 - 值映射關係,則返回true. |
10 |
Set keySet() 返回鍵包含在此映射的基於身份的set視圖. |
11 |
Object put(Object key, Object value) 將指定的值與此標識哈希映射中的指定鍵. |
12 |
void putAll(Map t) 所有映射關係複製從指定映射到此映射這些映射關係將替換此映射目前針對指定映射的所有鍵的所有映射關係. |
13 |
Object remove(Object key) 如果存在一個鍵,從該映射中移除映射. |
14 |
int size() 返回鍵 - 值映射關係在此標識哈希映射數. |
15 |
Collection values() 返回此映射中包含的值的集合視圖. |
例子:
下麵的程序說明了幾個由這個集合所支持的方法:
import java.util.*; public class IdentityHashMapDemo { public static void main(String args[]) { // Create a hash map IdentityHashMap ihm = new IdentityHashMap(); // Put elements to the map ihm.put("Zara", new Double(3434.34)); ihm.put("Mahnaz", new Double(123.22)); ihm.put("Ayan", new Double(1378.00)); ihm.put("Daisy", new Double(99.22)); ihm.put("Qadir", new Double(-19.08)); // Get a set of the entries Set set = ihm.entrySet(); // Get an iterator Iterator i = set.iterator(); // Display elements while(i.hasNext()) { Map.Entry me = (Map.Entry)i.next(); System.out.print(me.getKey() + ": "); System.out.println(me.getValue()); } System.out.println(); // Deposit 1000 into Zara's account double balance = ((Double)ihm.get("Zara")).doubleValue(); ihm.put("Zara", new Double(balance + 1000)); System.out.println("Zara's new balance: " + ihm.get("Zara")); } }
這將產生以下結果:
Ayan: 1378.0 Zara: 3434.34 Qadir: -19.08 Mahnaz: 123.22 Daisy: 99.22 Zara's new balance: 4434.34