--------------------------------------------------------------------------------------------------------------------------
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