美文网首页
LRU缓存算法

LRU缓存算法

作者: boyiis | 来源:发表于2018-11-07 11:00 被阅读0次

    1. LRU缓存可使用一个HashMap和双向链表实现

    1.1定义双向链表的节点:
    class Node{
        int key;
        int value;
        Node pre;
        Node next;
     
        public Node(int key, int value){
            this.key = key;
            this.value = value;
        }
    }
    
    1.2实现:
    public class LRUCache {
        int capacity;
        HashMap<Integer, Node> map = new HashMap<Integer, Node>();
        Node head=null;
        Node end=null;
     
        public LRUCache(int capacity) {
            this.capacity = capacity;
        }
     
        public int get(int key) {
            if(map.containsKey(key)){
                Node n = map.get(key);
                remove(n);
                setHead(n);
                return n.value;
            }
     
            return -1;
        }
     
        public void remove(Node n){
            if(n.pre!=null){
                n.pre.next = n.next;
            }else{
                head = n.next;
            }
     
            if(n.next!=null){
                n.next.pre = n.pre;
            }else{
                end = n.pre;
            }
     
        }
     
        public void setHead(Node n){
            n.next = head;
            n.pre = null;
     
            if(head!=null)
                head.pre = n;
     
            head = n;
     
            if(end ==null)
                end = head;
        }
     
        public void set(int key, int value) {
            if(map.containsKey(key)){
                Node old = map.get(key);
                old.value = value;
                remove(old);
                setHead(old);
            }else{
                Node created = new Node(key, value);
                if(map.size()>=capacity){
                    map.remove(end.key);
                    remove(end);
                    setHead(created);
     
                }else{
                    setHead(created);
                }    
     
                map.put(key, created);
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:LRU缓存算法

          本文链接:https://www.haomeiwen.com/subject/gpbmxqtx.html