LRU特点
1.固定容量,超过容量删除最近最少使用的数据
2.新增加的元素,如果存在需要刷新它的生命周期
链表实现关键点
1.给链表设置一个固定长度,如果超过固定长度,删除链表末尾的元素
2.新添加元素,将元素放在链表头
3.判断元素是否已存在,如果存在,需要先删除,然后再添加到表头
代码实现
public class LruTest<E> {
private LinkedList<E> link = new LinkedList();
private int limit;
//默认固定容量
private final int DEFAULT_LIMIT = 3;
public LruTest(int limit) {
this.limit = limit;
}
public LruTest() {
this.limit = DEFAULT_LIMIT;
}
//添加元素
public void add(E e) {
//判断元素是否存在,存在则删除
if (link.contains(e)) {
link.remove(e);
}
//判断元素添加是否超过容量,超过则删除尾部元素
if (link.size() == limit) {
link.removeLast();
}
//添加元素到头部
link.addFirst(e);
}
//重写toString方法
@Override
public String toString() {
return link.toString();
}
测试
public static void main(String[] args) {
LruTest<Integer> link = new LruTest<>();
link.add(1);
link.add(2);
link.add(3);
link.add(4);
link.add(5);
link.add(1);
System.out.println(link);
}
//输出[1, 5, 4]