java - LinkedHashMap 實現 LRU


mybatis緩存:

從數據查詢數據時,會把結果放入緩存池。

在沒有對這個表進行修改操作時,調用同一個方法時,相同查詢語句會直接讀取緩存池中的結果。

當緩存池滿時,會把最近沒有被使用的緩存中的數據覆蓋掉。(LRU   least recently used);

 

其中主要使用了linkedHashMap

仿照mybatis中的原理,可以自己利用LinkedHashMap寫一個LRU算法。

import java.util.*;

public class test {

    public static void main(String[] arg){
        testLinkedHashMap();

    }

    public static void testLinkedHashMap() {
        LinkedHashMap<String, String> map = new LinkedHashMap<String, String>(5,0.75F ,true){ //第三個參數設為true時,在被使用時會把被使用的數據放到結尾。
            @Override
            protected boolean removeEldestEntry(Map.Entry<String, String> var){ //該方法原本是默認返回false,會在put之后被執行,重寫該方法,在數據多於某個值時,返回true,刪除頭結點。
                if(this.size() > 5){
                    return true;
                }
                return false;
            }

        };
        map.put("aa", "1");
        map.put("bb", "2");
        map.put("cc", "3");
        map.put("dd", "4");
        System.out.println(map);
        map.get("cc");
        System.out.println("=================使用cc==================");
        System.out.println(map);

        map.get("bb");
        System.out.println("=================使用bb===================");
        System.out.println(map);

        map.put("ee","5");
        System.out.println("=================加入ee===================");
        System.out.println(map);

        map.put("ff","6");
        System.out.println("=================加入ff===================");
        System.out.println(map);
    }

    void print(LinkedHashMap<String, String> source) {
        source.keySet().iterator().forEachRemaining(System.out::println);
    }
}

 

執行結果

{aa=1, bb=2, cc=3, dd=4}
=================使用cc==================
{aa=1, bb=2, dd=4, cc=3}
=================使用bb===================
{aa=1, dd=4, cc=3, bb=2}
=================加入ee===================
{aa=1, dd=4, cc=3, bb=2, ee=5}
=================加入ff===================
{dd=4, cc=3, bb=2, ee=5, ff=6}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM