LRU Cache

来源:互联网 发布:淘宝不搜血滴子上一句 编辑:程序博客网 时间:2024/06/16 12:46
public class LRUCache {    private class Node {        int key;        int value;        Node prev;        Node next;        public Node (int key, int value) {            this.key = key;            this.value = value;        }    }        int size = 0;    Node head = new Node(-1, -1);    Node tail = new Node(-1, -1);    Map<Integer, Node> map = new HashMap<>();        public LRUCache(int capacity) {        size = capacity;        head.next = tail;        head.prev = tail;        tail.next = head;        tail.prev = head;    }        public int get(int key) {        if (!map.containsKey(key)) {            return -1;        }        Node node = map.get(key);        Node prev = node.prev;        Node next = node.next;        prev.next = next;        next.prev = prev;        moveToTail(node);        return node.value;    }        public void set(int key, int value) {        if (get(key) != -1) {            Node node = map.get(key);            node.value = value;            return;        }        Node node = new Node(key, value);        if (map.size() == size) {            Node deletedNode = head.next;            Node nextNode = deletedNode.next;            head.next = nextNode;            nextNode.prev = head;            map.remove(deletedNode.key);        }        map.put(key, node);        moveToTail(node);    }        private void moveToTail(Node node) {        node.next = tail;        node.prev = tail.prev;        tail.prev.next = node;        tail.prev = node;    }}

0 0
原创粉丝点击