Java中的软引用LinkedHashMap?

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)