LRU 缓存机制 - 数据结构的实现
class LRUCache {class Node{int key;int val;Node next;Node pre;Node(){}Node(int key, int val){this.key = key;this.val = val;}}Node first;Node last;Map<Integer, Node> map;int capacity;public LRUCache(int capacity) {this.first = new Node();this.last = new Node();first.next = last;last.pre = first;this.map = new HashMap<>();this.capacity = capacity;}public int get(int key) {Node node = map.get(key);if(node == null) return -1;getNode(node);moveToHead(node);return node.val;}public void put(int key, int value) {Node node = map.get(key);if(node != null){node.val = value;getNode(node);moveToHead(node);}else{if(map.size() == capacity){map.remove(last.pre.key);getNode(last.pre);}node = new Node(key, value);map.put(key, node);moveToHead(node);}}public void getNode(Node node){node.pre.next = node.next;node.next.pre = node.pre;}public void moveToHead(Node node){node.next = first.next;first.next.pre = node;node.pre = first;first.next = node;}}
自己处理输入输出
[
