LRU实现

代码如下

class LRUCache{
    private int capacity;
    private HashMap<Integer,Integer> map;
    private LinkedList<Integer> list;
    public LRUCache(int capacity){
        this.capacity = capacity;
        map = new HashMap<>();
        list=new LinkedList<>();
    }

    public int get (int key){
        if(map.containsKey(key)){
            list.remove((Integer) key);
            list.addLast(key);
            return map.get(key);
        }
        return -1;
    }

    public void put(int key, int value){
        if(map.containsKey(key)){
            list.removeFirst();
            list.addLast(key);
            map.put(key,value);
            return ;
        }
        if(list.size()==capacity){
            map.remove(list.removeFirst());
            map.put(key,value);
            list.addLast(key);
        }
        else{
            map.put(key,value);
            list.addLast(key);
        }
    }


}
public class LRU {
    class LRUCache extends LinkedHashMap<Integer,Integer>{
        private int capacity;
        
        public LRUCache(int capacity){
            super(capacity,0.75F,true);
            this.capacity=capacity;
        }
        
        public int get(int key){
            return super.getOrDefault(key,-1);
        }
        
        public void put(int key,int value){
            super.put(key,value);
        }
        
        @Override
        public boolean removeEldestEntry(Map.Entry<Integer,Integer> eldest){
            return size()>capacity;
        }
    }
}

 

上一篇:【redis前传】自己手写一个LRU策略 | redis淘汰策略


下一篇:LRU算法