LRU Cache

来源:互联网 发布:网络小精灵 编辑:程序博客网 时间:2024/05/16 01:30
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 prevN = node.prev;        Node nextN = node.next;        prevN.next = nextN;        nextN.prev = prevN;        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 prevD = deletedNode.prev;            Node nextD = deletedNode.next;            prevD.next = nextD;            nextD.prev = prevD;            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
原创粉丝点击