1. 程式人生 > 其它 >LinkedHashMap實現LRU

LinkedHashMap實現LRU

LinkedHashMap 底層使用HashMap實現,為了實現對key的順序訪問,底層同時也維護一個連結串列。在LinkedHashMap中有兩種排序規則,一種是按插入順序進行排序、一種是按最近獲取順序倒序(即最近訪問的資料總會被替換到連結串列的尾部);利用LinkedHashMap,我們實現LRU,程式碼介面如下

/**
 * @author sunyiwei
 */
public class LRULinkedHashMap<K, V> {
    private LinkedHashMap<K, V> map;
    private int cacheSize;

    public LRULinkedHashMap(final int cacheSize) {
        this.cacheSize = cacheSize;
        final float loadFactor = 0.75f;
        map = new LinkedHashMap<K, V>(16, loadFactor, true) {
            //呼叫put方法後觸發,預設是實現是false,不會移除頭結點,如果返回true,則會移除頭結點
            @Override
            protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
                if (cacheSize + 1 == map.size()) {
                    return true;
                } else {
                    return false;
                }
            }
        };
    }

    public synchronized V get(K key){
        return map.get(key);
    }

    public synchronized void put(K key,V val){
        map.put(key,val);
    }

    public synchronized void clear(){
        map.clear();
    }

    public synchronized int size(){
        return map.size();
    }
    
    
}