1. 程式人生 > >Java演算法--LRU演算法實現示例

Java演算法--LRU演算法實現示例

LRU演算法,即Last Recently Used --選擇最後一次訪問時間距離當前時間最長的一頁並淘汰之--即淘汰最長時間沒有使用的頁。

按照最多5塊的記憶體分配情況,實現LRU演算法程式碼如下:

public class LRU {

  private int theArray[];
  private int back;            //定義隊尾
  private int currentSize;     //佇列中存放元素個數
  private int maxSize=5;       //佇列中能存放元素的個數
   
  public LRU(){
    theArray=new int[maxSize];
    back=0;
    currentSize=0;
  }
  public void queue(int a[]){
    	for(int i=0;i<a.length;i++){
    		enQueue(a[i]);
    	}
  }
  
  public void enQueue(int x){	//入隊
    beUsed(x);			//先判斷是否已存在該頁號,若存在,刪除
    if(currentSize<maxSize){
      theArray[back]=x;
      back++;	
      currentSize++;
    }else if(currentSize==maxSize){	     //滿了
      for(int i=0;i<maxSize-1;i++){
        theArray[i]=theArray[i+1];
      }
      theArray[maxSize-1]=x;
    }
  for(int i=0;i<currentSize;i++){
    System.out.print(theArray[i]);
  }
  System.out.println();
  }
  public void beUsed(int x){	    //判斷是否已存在該頁號,若存在,刪除已有的
    for(int i=0;i<currentSize;i++){
      if(theArray[i]==x){
        for(int j=i;j<currentSize-1;j++){
          theArray[j]=theArray[j+1];
        }
        currentSize--;
        back--;
      }	
    }
  }
  public static void main(String[] args) {
    LRU lru=new LRU();
    int a[]={4,7,0,7,1,0,1,2,1,2,6};
    lru.queue(a);
  }

}
測試結果如下: