我需要一个带弱键的简单哈希映射. Java自己的WeakHashMap给了我这个,但不是身份语义(它使用equals()进行密钥比较).
Google的Guava库已经改进了它的哈希映射方法.在最新版本(14.0)中,我现在显然应该使用CacheBuilder,而不是使用MapMaker(其中有很多(如果不是大多数的东西都已弃用)),它有各种各样的选项.好吧,它有一个weakKeys()选项,所以这就是我要用的.但是生成的缓存也是并发的(即它将各种映射保留在内部并使用它自己的内部密钥集来同时调节访问),我无法关闭它;我不需要并发,因为我已经使用自己的ReadWriteLock来管理对我的地图的访问.
好吧,我会接受并发;给我一张地图!我尝试:
Map<Foo, Bar> map = CacheBuilder.newBuilder().weakKeys().build();
等等,这给了我一个缓存< Object,Object>,这不是Map< Foo,Bar>!如何在Google Guava中获得基于身份的简单弱键映射?
解决方法:
假设你愿意和并存,你几乎就在那里:
CacheBuilder.newBuilder().weakKeys().build().asMap();
但是那说……你的用例并不完全清楚,也就是说,为什么你需要一个具有这些属性的地图,以及为什么当密钥有另一个相等的概念时你需要一个带有身份语义的地图.