2014-04-07 30 views
8

我需要一個Map實現共享IdentityHashMapWeakHashMap(引用相等,而不是equals()和關鍵字上的弱引用)的屬性。IdentityHashMap和WeakHashMap的組合

你推薦什麼實現(它必須在Android上工作)?

+0

'IdentityHashMap ,V>'? – fge

+1

@fge我在想,但它不會在地圖收集時從地圖上刪除密鑰。 – assylias

+0

@assylias呃好的,我看到了問題...然後'WeakHashMap ,V>'可以做到這一點(使用'Equivalence.identity()'),但這需要番石榴和鍵入''。 wrap()' – fge

回答

2

如果您建議番石榴,那麼new MapMaker().weakKeys().makeMap()將直接做這項工作,因爲weakKeys使用引用相等的密鑰。

weakKeys文檔說:

指定存儲在圖中的每個鍵(未值)應該被包裹在一個WeakReference的(默認,強引用被使用)。 警告:使用此方法時,生成的地圖將使用標識(==)比較來確定鍵的相等性,這是對Map規範的技術違規,可能不是您所期望的。