我想要一个映射到相当大对象的键映射。由于地图将用作缓存,因此我希望通过软链接 ( java.lang.ref.SoftReference) 引用值/条目以在纯内存上清除它。但在这种情况下,我需要有自己的computeIfAbsent()方法实现。我可以通过以下方式实现它:Map<Integer, SoftReference<T>> myMap = new HashMap<>();public T get(Integer key) { SoftReference<T> value = myMap.get(key); if (value == null || value.get() == null) { value = new SoftReference(retrieveValue()); myMap.put(key, value); } return value.get();}只是想知道,这样的地图是否有开箱即用的解决方案,比如java.util.WeakHashMap?
1 回答

繁星点点滴滴
TA贡献1803条经验 获得超3个赞
是的,Guava 的CacheBuilder支持 SoftReference 和 WeakReference 值,以及其他基于大小和时间的驱逐策略。您可以直接使用缓存,也可以将其作为地图查看:
ConcurrentMap<Integer, V> map = CacheBuilder.newBuilder() .softValues() .build() .asMap()
添加回答
举报
0/150
提交
取消