LRU缓存机制实现

class LRUCache{
    class Node{
        Node next,pre;
        int val,key;//这个很关键,必须要有key,这样在删除的时候才能反向找到map的key
        public Node(int key, int val){
            pre = null;
            next = null;
            this.val = val;
            this.key = key;
        }
    }
    int MAX_LEN;
    Map<Integer, Node> map = new HashMap<>();
    Node head = new Node(0,0);
    public LRUCache(int k){
        head.pre = head;
        head.next = head;
        MAX_LEN = k;
    }
    public void put(int key, int value){
        if(map.containsKey(key)) {
            Node p = map.get(key);
            update(p);
            p.val = value;
        }else {
            if(map.size() == MAX_LEN) {
                map.remove(head.pre.key);
                delete(head.pre);
            }
            map.put(key, insertFirst(new Node(key, value)));
        }
    }
    public int get(int k){
        int res = -1;
        if(map.containsKey(k)) {
            Node p = map.get(k);
            update(p);
            res = p.val;
        }
        return res;
    }
    public void delete(Node p) {
        p.next.pre = p.pre;
        p.pre.next = p.next;
    }
    public Node insertFirst(Node p) {
        p.next = head.next;
        p.pre = head;
        head.next.pre = p;
        head.next = p;
        return p;
    }
    public void update(Node p) {
        delete(p);
        insertFirst(p);
    }
}
全部评论

相关推荐

菜菜咪:1. 可以使用简历网站的模版,美观度会更好一点 2. 邮箱可以重新申请一个,或者用qq邮箱的别名,部分hr可能会不喜欢数字邮箱 3. 项目经历最好分点描述,类似的项目很多,可以参考一下别人怎么写的 4. 自我评价可加可不加,技术岗更看重技术。最后,加油,优秀士兵
点赞 评论 收藏
分享
10-06 12:46
门头沟学院 Java
跨考小白:定时任务启动
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务