基于LinkedHashMap实现LRU缓存

基于LinkedHashMap实现LRU缓存

原理

LinkedHashMap中的removeEldestEntry方法能够移除最近最少使用的key,所以只需要重写这个方法,判断map中的size大小和初始cahe的大小并返回true就行

实现


public class LinkedHashMapBasedLRUCache<K, V> {

    private final int size;

    private LinkedHashMap<K, V> cacheMap;

    public LinkedHashMapBasedLRUCache(int size) {
        this.size = size;
        cacheMap = new LinkedHashMap<K, V>(size){
            @Override
            protected boolean removeEldestEntry(Map.Entry eldest) {
                if (cacheMap.size() > size){
                    return true;
                }
                return false;
            }
        };
    }

    public void put(K k, V v){
        this.cacheMap.put(k, v);
    }

    public V get(K k){
        return this.cacheMap.get(k);
    }

    public int size(){
        return this.cacheMap.size();
    }

    public Map<K, V> data(){
        return this.cacheMap;
    }
}

测试

  @Test
  public void lruCacheTest() {
      LinkedHashMapBasedLRUCache<String, String> cache = new LinkedHashMapBasedLRUCache<>(2);
      cache.put("a", "a");
      cache.put("b", "b");
      System.out.println("size: " + cache.size());
      System.out.println("cache: " + cache.data());
      System.out.println("after add third key");
      cache.put("c", "b");
      System.out.println("size: " + cache.size());
      System.out.println("cache: " + cache.data());

  }

结果:

size: 2
cache: {a=a, b=b}
after add third key
size: 2
cache: {b=b, c=b}

可以发现首次添加的key[a]已经被删除了,而且cache的大小也保持在初始大小2的容量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值