开发者社区> 问答> 正文

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

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

展开
收起
李博 bluemind 2018-12-14 16:37:52 2246 0
1 条回答
写回答
取消 提交回答
  • 1.阿里云大学讲师,主讲《微服务Spring Cloud设计与开发实战》《MongoDB高级实战》等课程 2.MongoDB中文社区专家 3.《MongoDB实战》第2版译者 5.吉林大学计算机科学学士、上海交通大学硕士

    参考网上的代码可以实现一个。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
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载