定义:
LRU是Least Recently Used的缩写,即最近最少使用,使用常见是当内存不足时,需要淘汰最近最少使用的数据。
特点:
1、新数据插入到链表头部
2、当缓存命中(即缓存数据被访问),数据要移到表头
3、当链表满的时候,将链表尾部的数据丢弃
实现:
package com.win.home; public class LruLinkedList<T> extends LinkedList { // 最大保留节点数 private final static int DEFAULT_CAP = 5; private int maxNodeSize; public LruLinkedList(){ this(DEFAULT_CAP); } public LruLinkedList(int default_cap){ maxNodeSize = default_cap; } public void lruPut(T data){ if (getSize() >= maxNodeSize) removeLast(); put(data); } public void lruSet(int index){ Node p = getHead(); Node q = p; for (int i = 0;i < index; i++){ p = q; q = q.next; } p.next = q.next; q.next = getHead(); setHead(q); } public static void main(String[] args) { LruLinkedList<Integer> lruLinkedList = new LruLinkedList<>(); for (int i = 0;i<=3;i++) { lruLinkedList.put(i); } lruLinkedList.toString(); lruLinkedList.lruPut(5); lruLinkedList.toString(); lruLinkedList.lruPut(6); lruLinkedList.toString(); lruLinkedList.lruSet(2); lruLinkedList.toString(); } }