LinkedHashMap實現LRU
阿新 • • 發佈:2021-07-09
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(); } }