package structure.week5;
import java.util.HashSet;
import structure.week1.ArrayList;
public class LRUPageFrame {
int size;
Node head = new Node(0);
HashSet<Integer> lib = new HashSet<Integer>();
class Node{
int val;
Node next;
public Node(int _val){
val = _val;
next = null;
}
}
public LRUPageFrame(int _size){
if(_size>0) {
this.size = _size;
}
}
public int[] getAll(){
int length = lib.size(),index = 0;
int []res = new int[length];
Node p = head.next;
while(p!=null){
res[index] = p.val;
index += 1;
p = p.next;
}
return res;
}
public void add(int e){
int index = 0;
if(lib.contains(e)){
Node p = head;
while(p.next!= null){
if(p.next.val == e){
Node newn = p.next;
p.next = newn.next;
newn.next = head.next;
head.next = newn;
break;
}
p = p.next;
}
}else{
if(lib.size() == size){
lib.add(e);
Node newn = new Node(e);
newn.next = head.next;
head.next = newn;
Node p = head;
while(p.next.next != null)
p = p.next;
Node deln = p.next;
lib.remove(deln.val);
p.next = null;
}else{
Node newn = new Node(e);
newn.next = head.next;
head.next = newn;
lib.add(e);
}
}
}
}