开发者社区 问答 正文

[@talishboy][¥20]Java 中如何利用泛型写一个 LRU 缓存?

问题来自Java技术沙龙的李博
Java线下沙龙报名链接:https://yq.aliyun.com/activity/796

展开
收起
李博 bluemind 2018-12-14 16:37:52 2323 分享 版权
1 条回答
写回答
取消 提交回答
  • 1.阿里云大学荣誉讲师, 2.MongoDB中文社区专家

    参考网上的代码可以实现一个。List可以换成泛型的类型。
    import java.util.LinkedHashMap;
    import java.util.Map;

    public class LruSimpleCache implements LruCache {

    Map<K, V> map = new LinkedHashMap (  );
    
    public LruSimpleCache (final int limit) {
           map = new LinkedHashMap <K, V> (16, 0.75f, true) {
               @Override
               protected boolean removeEldestEntry(final Map.Entry<K, V> eldest) {
                   return super.size() > limit;
               }
           };
    }
    @Override
    public void put ( K key, V value ) {
        map.put ( key, value );
    }
    
    @Override
    public V get ( K key ) {
        return map.get(key);
    }
    
    //For testing only
    @Override
    public V getSilent ( K key ) {
        V value =  map.get ( key );
        if (value!=null) {
            map.remove ( key );
            map.put(key, value);
        }
        return value;
    }
    
    @Override
    public void remove ( K key ) {
        map.remove ( key );
    }
    
    @Override
    public int size () {
        return map.size ();
    }
    
    public String toString() {
        return map.toString ();
    }
    

    }
    https://stackoverflow.com/questions/221525/how-would-you-implement-an-lru-cache-in-java

    2019-07-17 23:21:17
    赞同 展开评论