簡體   English   中英

基於Google Guava身份的弱密鑰的簡單Java哈希映射?

[英]Simple Java hash map with weak keys based on identity in Google Guava?

我需要一個帶弱鍵的簡單哈希映射。 Java自己的WeakHashMap給了我這個,但不是身份語義(它使用equals()進行密鑰比較)。

Google的Guava庫已經改進了它的哈希映射方法。 在最新版本(14.0)中,我現在顯然應該使用CacheBuilder ,而不是使用MapMaker (其中有很多(如果不是大多數的東西都已棄用)),它有各種各樣的選項。 好吧,它有一個weakKeys()選項,所以這就是我要用的。 但是生成的緩存也是並發的(即它將各種映射保留在內部並使用它自己的內部密鑰集來同時調節訪問),我無法將其關閉; 我不需要並發,因為我已經使用自己的ReadWriteLock來管理對我的地圖的訪問。

好吧,我會接受並發; 給我一張地圖! 我嘗試:

Map<Foo, Bar> map = CacheBuilder.newBuilder().weakKeys().build();

等等,這給了我一個Cache<Object, Object> ,它不是Map<Foo, Bar> 如何在Google Guava中獲得基於身份的簡單弱鍵映射?

假設你願意和並存,你幾乎就在那里:

CacheBuilder.newBuilder().weakKeys().build().asMap();

但是那說......你的用例並不完全清楚,也就是說, 為什么你需要一個具有這些屬性的地圖,以及為什么當密鑰有另一個相等的概念時你需要一個帶有身份語義的地圖。

我需要一個帶弱鍵的簡單哈希映射。

我不遵循為什么要從MapMaker切換到CacheBuilder 聽起來你想要的就是MapMaker的用途。

您可能認為不需要並發,但請記住GC可以並發運行,並導致清除過時的條目。 無論如何,並發性甚至不會花費你太多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM