2015年4月5日 星期日

LinkedHashMap

LRULinkedHashMap.java
--------------------------------------------------------------------------------------------------------------------------
import  java.util.*;
//擴展一下LinkedHashMap這個類,讓他實現LRU算法  
class  LRULinkedHashMap<K,V>  extends  LinkedHashMap<K,V>{
    //定義緩存的容量
    private  int  capacity;
    private  static  final  long  serialVersionUID = 1L;
    //帶參數的構造器     
    LRULinkedHashMap( int  capacity){
        //調用LinkedHashMap的構造器,傳入以下參數  
        super ( 16,1.5f, false );
        //傳入指定的緩存最大容量  
        this .capacity=capacity;
    }
    //實現LRU的關鍵方法,如果map裡面的元素個數大於了緩存最大容量,則刪除鍊錶的頂端元素  
    @Override
    public  boolean  removeEldestEntry(Map.Entry<K, V> eldest){
        System.out.println(eldest.getKey() +  "="  + eldest.getValue());  
        return  size()>capacity;
    }  
}


Test.java
--------------------------------------------------------------------------------------------------------------------------
import java.util.Iterator;
import java.util.Map;

//測試類  
class  Test{  
public  static  void  main(String[] args)  throws  Exception{  
  
    //指定緩存最大容量為4  
Map<Integer,Integer> map= new  LRULinkedHashMap<>( 4 );  
    map.put( 9 , 3 );  
    map.put( 7 , 4 );  
    map.put( 5 , 9 );  
    map.put( 3 , 4 );  
    map.put( 6 , 6 );  
    //總共put了5個元素,超過了指定的緩存最大容量  
    //遍歷結果  
        for (Iterator<Map.Entry<Integer,Integer>> it=map.entrySet().iterator();it.hasNext();){  
            System.out.println(it.next().getKey());  
        }  
    }  
--------------------------------------------------------------------------------------------------------------------------
印出結果:
9=3
9=3
9=3
9=3
9=3
7
5
3
6