His*_*His 4 java soft-references linkedhashmap
Java中是否存在基于softreference的LinkedHashMap?如果不是,有没有人得到我可以重用的代码片段?我保证会正确引用它.
谢谢.
小智 6
WeakHashMap不保留插入顺序.因此,它不能被视为LinkedHashMap的直接替代品.此外,仅当密钥不再可访问时才会释放映射条目.这可能不是你想要的.
如果你正在寻找的是一个内存友好的缓存,这是一个你可以使用的天真实现.
package be.citobi.oneshot;
import java.lang.ref.SoftReference;
import java.util.LinkedHashMap;
public class SoftLinkedCache<K, V>
{
private static final long serialVersionUID = -4585400640420886743L;
private final LinkedHashMap<K, SoftReference<V>> map;
public SoftLinkedCache(final int cacheSize)
{
if (cacheSize < 1)
throw new IllegalArgumentException("cache size must be greater than 0");
map = new LinkedHashMap<K, SoftReference<V>>()
{
private static final long serialVersionUID = 5857390063785416719L;
@Override
protected boolean removeEldestEntry(java.util.Map.Entry<K, SoftReference<V>> eldest)
{
return size() > cacheSize;
}
};
}
public synchronized V put(K key, V value)
{
SoftReference<V> previousValueReference = map.put(key, new SoftReference<V>(value));
return previousValueReference != null ? previousValueReference.get() : null;
}
public synchronized V get(K key)
{
SoftReference<V> valueReference = map.get(key);
return valueReference != null ? valueReference.get() : null;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5429 次 |
| 最近记录: |