[JAVA] 使用 LRUMap 存取資料

這邊附上官方的網址.
https://commons.apache.org/proper/commons-collections/javadocs/api-2.1.1/org/apache/commons/collections/SequencedHashMap.html

LRUMap 是一個暫存容器, 有點像Key value pair.
也可以是

Map<Object, Object>

註: LRUMap 屬於非同步處理, 執行緒安全.

可以在一開始給定容器大小, 然後給予值.
超過大小則會把最早寫入的清掉. 把新的元素替換.

 public static void main(String[] args) {
	 LRUMap map = new LRUMap(3);
	 map.put("1", 1);
	 map.put("2", 2);
	 map.get("1");
	 map.put("3", 3);
	 map.put("4", 4);
	 
	 for(Iterator it = map.entrySet().iterator();it.hasNext();){
		 System.out.println(it.next());
	 }
 }

最後輸出的結果會是

1=1

3=3

4=4

最初的 2 因為陣列超過大小, 被淘汰掉.
1 則是因為在2存入後有被叫用, 所以更新了淘汰順序.

 

另外若想同步處理,
則可以這樣宣告.
 

import java.util.Collections;
import java.util.Map;
 
import org.apache.commons.collections.map.LRUMap;
 
public class LRUSample {
 
    private static final int MAX_CAPACITY = 5;
 
    public static void main(String[] args) {
        Map<Integer, String> lruMap = (Map<Integer, String>) Collections.synchronizedMap(new LRUMap(MAX_CAPACITY));
 
        for(int i = 0; i < 30; i++) {
            String string = "Entry " + (i + 1);
            lruMap.put(i, string);
 
            System.out.println(lruMap.toString());
        }
    }
 
}