public class LRUPageFrame { private static class Node { Node prev; Node next; int pageNum; Node(int Num) { pageNum=Num; } } private int capacity; private Node first;// 链表头 private Node last;// 链表尾 private int nodeNum = 0; public LRUPageFrame(int capacity) { this.capacity = capacity; } /** * 获取缓存中对象 * * @param key * @return */ public void access(int pageNum) { int isPageNum = isContained(pageNum); if(isPageNum!=-1){ int index = 0; Node node = first; while(index!=isPageNum){ // move to the Node node=node.next; index++; } if(index != 0){ if(node.next == null){ node.prev.next = null; }else{ node.prev.next = node.next; } node.next = first; first = node; } }else{ if(first != null){ Node tmp = new Node(pageNum); tmp.next = first; first.prev = tmp; first = tmp; nodeNum++; if(nodeNum > capacity){ Node node = first; for(int i=0;i<capacity-1;i++){ node=node.next; } node.next.prev = null; node.next = null; } }else{ first = new Node(pageNum); nodeNum++; } } } private int isContained(int pageNum){ Node node = first; int result = 0; while(node != null){ if(node.pageNum == pageNum){ return result; }else{ node = node.next; result++; } } result = -1; return result; } public String toString(){ StringBuilder buffer = new StringBuilder(); Node node = first; while(node != null){ buffer.append(node.pageNum); node = node.next; if(node != null){ buffer.append(","); } } return buffer.toString(); } }