gpt4 book ai didi

java - 具有软引用值的 HashMap 实现

转载 作者:行者123 更新时间:2023-12-02 09:59:27 25 4
gpt4 key购买 nike

我想要一个带有键映射到相当大的对象的 Map。由于 map 将用作缓存,因此我想通过软链接(soft link)(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();
}

只是想知道,对于这样的 Map 是否有开箱即用的解决方案,例如 java.util.WeakHashMap

谢谢!

最佳答案

是的, Guava 的 CacheBuilder支持 SoftReference 和 WeakReference 值,以及其他基于大小和时间的驱逐策略。您可以直接使用Cache,或者将其作为Map查看:

ConcurrentMap<Integer, V> map = CacheBuilder.newBuilder()
.softValues()
.build()
.asMap()

关于java - 具有软引用值的 HashMap 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55746060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com