4

我需要一个带有弱键的简单哈希映射。Java 自己的WeakHashMap给了我这一点,但没有身份语义(它equals()用于键比较)。

Google 的 Guava 库已经改进了它的哈希映射方法。在最新版本(14.0)中MapMaker,我现在显然应该使用 a ,而不是使用 a (如果不是大多数的话,它有很多已弃用的东西),CacheBuilder它有各种选项。好吧,它有一个weakKeys()选项,所以这就是我将使用的。但是生成的缓存也是并发的(即,它在内部保存各种映射并使用自己的内部密钥集来同时控制访问),我无法将其关闭;我不需要并发,因为我已经在使用我自己的ReadWriteLock来管理对我的地图的访问。

好吧,我会接受并发;把地图给我!我尝试:

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

等等,这给了我 a Cache<Object, Object>,这不是 a Map<Foo, Bar>!如何在 Google Guava 中获得简单的基于身份的弱键映射?

4

2 回答 2

2

假设你愿意接受并发,你就快到了:

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

但这就是说……您的用例并不完全清楚,也就是说,为什么需要具有这些属性的映射,以及当键具有另一种相等概念时,为什么需要具有标识语义的映射。

于 2013-02-27T21:22:20.263 回答
2

我需要一个带有弱键的简单哈希映射。

我不明白你为什么要切换MapMakerCacheBuilder那时。听起来你想要什么就是什么MapMaker

You may not think you need concurrency, but remember that GC can run concurrently, and cause stale entries to be cleaned up. Anyway, the concurrency won't even cost you much.

于 2013-02-28T15:53:32.690 回答