今天看別人寫的代碼, 其中使用了兩種Map子類, IdentityHashMap和WeakHashMap, 經查看JDK文檔得知:
IdentityHashMap
此類利用哈希表實現
Map 接口,比較鍵(和值)時使用引用相等性代替對象相等性。換句話說,在
IdentityHashMap 中,當且僅當
(k1==k2) 時,才認為兩個鍵
k1 和
k2 相等(在正常
Map 實現(如
HashMap)中,當且僅當滿足下列條件時才認為兩個鍵
k1 和
k2 相等:
(k1==null ? k2==null : e1.equals(e2)))。
也就是說, 如果Key是同一個對象才算是鍵相等, 如果只是值相等, 那么不算相等.
比如
Map<Pet, String> map = new IdentityHashMap<Pet, String>();
Pet p = new Pet("eric");
map.put(new Pet("eric"), "eric");
map.put(new Pet("eric"), "hello");
System.out.println("size = " + map.size());
Map<Pet, String> hashMap = new HashMap<Pet, String>();
hashMap.put(new Pet("eric"), "eric");
hashMap.put(new Pet("eric"), "hello");
System.out.println("hashMap size = " + hashMap.size());
Pet中的equals中只要name相等, 就算這兩個pet對象相等. 執行結果為:
size = 2
hashMap size = 1
WeakHashMap
以
弱鍵 實現的基于哈希表的
Map。在
WeakHashMap 中,當某個鍵不再正常使用時,將自動移除其條目。更精確地說,對于一個給定的鍵,其映射的存在并不阻止垃圾回收器對該鍵的丟棄,這就使該鍵成為可終止的,被終止,然后被回收。丟棄某個鍵時,其條目從映射中有效地移除,因此,該類的行為與其他的
Map 實現有所不同。
其實就是除了本map引用以外, 沒有其他對象引用該key對象, 則
WeakHashMap會自動移除這個key以及對應的值.
posted on 2009-05-15 16:54
周銳 閱讀(1495)
評論(5) 編輯 收藏 所屬分類:
Java