复习LRU算法,落实到代码加深一下印象
import java.util.HashMap;
/**
* 手写LRU算法
* @param <K>
* @param <V>
*/
public class LRU<K,V> {
private class Node {
// 前结点
private Node prev;
// 后结点
private Node next;
// 键
private K key;
// 值
private V value;
}
// 队列头尾
private Node head, tail;
// 队列长度
private int capacity;
// 存储结点
private HashMap<K, Node> map = new HashMap<>();
// 构造函数初始化
public LRU(int capacity) {
this.capacity = capacity;
this.map = new HashMap<>(capacity);
}
// 存储键值
public void put(K k, V v){
Node node = map.get(k);
if (node != null) {
node.value = v;
// 移动到队首
moveToHead(node);
}else {
node = new Node();
node.key = k;
node.value = v;