繁体   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