zoukankan      html  css  js  c++  java
  • lru

    class LRUCache {
        //自建一个类
        class DNode{
            int k;
            int v;
            DNode pre;
            DNode next;
            public DNode(){};
            public DNode(int kk,int vv){k = kk;v = vv;};
        }
        //自己的属性
        private int size;
        private int capacity;
        private DNode head,tail;
        private HashMap<Integer,DNode> map = new HashMap<>();
        public LRUCache(int capacity) {
            this.size = 0;
            this.capacity = capacity;
            head = new DNode();
            tail = new DNode();
            head.next = tail;
            tail.pre = head;
        }
        
        public int get(int key) {
           DNode c = map.get(key);
           if(c == null) return -1;
           // 把原来的删除 
           c.pre.next = c.next;
           c.next.pre = c.pre;
           // 重新插入 和head产生关联
           DNode og =  head.next ;
           head.next = c;
           c.pre = head ; 
           c.next = og;
           og.pre = c;
           return c.v;
        }
        
        public void put(int key, int value) {
            //分两种情况 有或者没有
            DNode c = map.get(key);
            if(c == null){
                //新建 插到头节点去
                DNode newnode = new DNode(key,value);
                map.put(key,newnode);
                size++;
                DNode og =  head.next ;
                head.next = newnode;
                newnode.pre = head ; 
                newnode.next = og;
                og.pre = newnode;
    
                if(size > capacity){
                    //删除尾节点
                    DNode bye = tail.pre;
                    bye.pre.next = bye.next;
                    bye.next.pre = bye.pre;
                    //从map移除
                    map.remove(bye.k);
                    //size--
                    size--;
                }
            }else{
                
                c.v = value;
                //还是要remove啊 好累我草
                c.next.pre = c.pre;
                c.pre.next = c.next;
                // 重新插入 和head产生关联
                DNode og =  head.next ;
                head.next = c;
                c.pre = head ; 
                c.next = og;
                og.pre = c;
    
                
            }
        }
    }
    
  • 相关阅读:
    常见树的总结
    《深入理解Java虚拟机》读书笔记(第三章)
    《Jave并发编程的艺术》学习笔记(1-2章)
    Java多线程与并发之面试常问题
    Morris遍历-如何用空间复杂度O(1)来遍历二叉树
    BFPRT算法
    Manacher
    maven基础
    play framework + sbt入门之环境搭建
    rancher部署kubernets集群
  • 原文地址:https://www.cnblogs.com/purexww/p/15242587.html
Copyright © 2011-2022 走看看