LRU Cache

来源:互联网 发布:酒店清洗床单 知乎 编辑:程序博客网 时间:2024/06/16 04:53
public class LRUCache {    private class Node {        int key;        int val;        Node next;        Node prev;        public Node(int key, int val) {            this.key = key;            this.val = val;            }    }    int size = 0;    Map<Integer, Node> map = new HashMap<>();    Node head = new Node(-1, -1);    Node tail = new Node(-1, -1);    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.next = node.next;        node.next.prev = node.prev;        moveToTail(node);        return node.val;    }    public void set(int key, int value) {        if (get(key) != -1) {            Node node = map.get(key);            node.val = value;            return;        }        if (size == map.size()) {            Node deletedNode = head.next;            head.next = deletedNode.next;            deletedNode.next.prev = head;            map.remove(deletedNode.key);        }        Node node = new Node(key, value);        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
原创粉丝点击