package com.github.wdn.coding2017.basic.lru; import com.github.wdn.coding2017.basic.LinkedList; /** * 用双向链表实现LRU算法 * @author liuxin * */ public class LRUPageFrame { private int capacity; private LinkedList cache = new LinkedList(); public LRUPageFrame(int capacity) { this.capacity = capacity; } /** * 获取缓存中对象 * * @param pageNum * @return */ public void access(int pageNum) { if(capacity==cache.size()){ int exist = exist(pageNum); if(exist>-1){ cache.addFirst(cache.remove(exist)); }else{ cache.removeLast(); cache.addFirst(pageNum); } }else { cache.addFirst(pageNum); } } private int exist(int pageNum){ for (int i = 0; i < cache.size(); i++) { if(cache.get(i).equals(pageNum)){ return i; } } return -1; } public String toString(){ return cache.toString().replace("[","").replace("]",""); } }