public class LRU<K, V> {
Node head;
Node tail;
Map<K, Node<K, V>> hm = new HashMap<>();
int capacity;
int size;
public LRU(int cap) {
head = new Node();
tail = new Node();
head.next = tail;
tail.prev = head;
this.capacity = cap;
}
public V get(K k) {
Node<K, V> node = hm.get(k);
if (node == null) return null;
this.moveToTail(node);
return node.val;
}
public void put(K k, V v) {
Node node = hm.get(k);
if (node == null) {
node = new Node(k, v);
hm.put(k, node);
this.addTail(node);
size++;
if (size > capacity) this.removeHead();
} else {
node.val = v;
this.moveToTail(node);
}
}
private void moveToTail(Node node) {
Node before = node.prev;
Node after = node.next;
before.next = after;
after.prev = before;
this.addTail(node);
}
private void addTail(Node node) {
Node pre = tail.prev;
node.next = tail;
node.prev = pre;
pre.next = node;
tail.prev = node;
}
private void removeHead() {
Node node = head.next;
Node nx = node.next;
node.next = null;
node.prev = null;
head.next = nx;
nx.prev = head;
hm.remove(node.key);
}
@Override
public String toString() {
return hm.toString();
}
static class Node<K, V> {
K key;
V val;
Node prev;
Node next;
public Node() {
}
public Node(K k, V v) {
this.key = k;
this.val = v;
}
@Override
public String toString() {
return "<" + key.toString() + ", " + val.toString() + ">";
}
}
}
LRU算法實(shí)現(xiàn)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 本文主要介紹了Nodejs基于LRU算法實(shí)現(xiàn)的緩存處理操作,結(jié)合具體實(shí)例形式分析了LRU算法的原理、功能以及n...
- 本文首發(fā)于 LOGI'S BLOG,由作者轉(zhuǎn)載。 在使用頁(yè)進(jìn)行內(nèi)存管理的操作系統(tǒng)中,當(dāng)新頁(yè)進(jìn)入內(nèi)存且內(nèi)存已滿時(shí),需...
- Android用LruCache(Least recently use Cache 意思就是最近使用次數(shù)最少的那...
- 1,LRU概念 1)LRU:least recent used 最近最少使用,常用于cpu的L1、L2等cache...
- 雙鏈表 來(lái)看雙向鏈表的實(shí)現(xiàn)首先定義Node List 尾插法1 tail.next = new Node2 new...