/**
* 使用LRU缓存淘汰策略
* least recently used(LRU)
*/
public class LruLinkedList<T> extends LinkedList<T> {
// 缓存大小
private int memory_size;
// 默认缓存容量
static final int DEFAULT_CAPTION = 5;
public LruLinkedList() {
this(DEFAULT_CAPTION);
}
public LruLinkedList(int memory_size) {
this.memory_size = memory_size;
}
public void lruPut(T data) {
if (size() >= memory_size) {
removeLast();
}
put(data);
}
public T lruRemove() {
return removeLast();
}
public T lruGet(int index) {
checkPositionIndex(index);
Node pre = first;
Node cur = first;
for (int i = 0; i < index; i++) {
pre = cur;
cur = cur.next;
}
pre.next = cur.next;
Node head = first;
cur.next = head;
first = cur;
return cur.data;
}
public static void main(String[] args) {
LruLinkedList<Integer> list = new LruLinkedList<>(5);
for (int i = 0; i < 5; i++) {
list.put(i);
}
list.toString();
list.set(3,2);
list.toString();
list.lruPut(18);
list.toString();
System.out.println(list.lruGet(2));
list.toString();
}
}
运行结果:
4 3 2 1 0
4 3 2 2 0
18 4 3 2 2
3
3 18 4 2 2
Process finished with exit code 0