LinkedHashMapによる最近の最小使用cacheの実現

2244 ワード

1.LRULeast Recently Used最近の最小使用アルゴリズム
2.最近の最少使用を実現するcache一般的にはcacheが使われていますが、最も考えやすいのはMapでしょう.最近の最少使用の要件を見ると、LinkedHashMapもちょうどこのアルゴリズムを実現しています.LinkedHashMapのaccessOrderがtrueに設定されている場合、mapの値は最近の最少使用アルゴリズムに従ってソートされ、デフォルトはaccessOrderがfasleになります
3.実戦
package com.eden.ClassLoaderTest;

import java.util.LinkedHashMap;
import java.util.Map;

import org.junit.Test;

/**
 * Unit test for simple App.
 */
public class AppTest {

    @Test
    public void LinkedHashMapTest() {

        //LRU
        Map map = new LinkedHashMap(30, 0.75f, true);
        for (int i = 0; i < 16; i++) {
            map.put(String.valueOf(i), String.valueOf(i + 1));
        }

        for (Map.Entry entry : map.entrySet()) {
            System.out.println("key=" + entry.getKey() + "---------value=" + entry.getValue());
        }

        System.out.println("----------      -------------");

        map.get("3");
        map.get("5");
        map.put("6", "100");

        for (Map.Entry entry : map.entrySet()) {
            System.out.println("key=" + entry.getKey() + "---------value=" + entry.getValue());
        }
    }
}

出力結果を2回確認します.
key=0---------value=1
key=1---------value=2
key=2---------value=3
key=3---------value=4
key=4---------value=5
key=5---------value=6
key=6---------value=7
key=7---------value=8
key=8---------value=9
key=9---------value=10
key=10---------value=11
key=11---------value=12
key=12---------value=13
key=13---------value=14
key=14---------value=15
key=15---------value=16
----------      -------------
key=0---------value=1
key=1---------value=2
key=2---------value=3
key=4---------value=5
key=7---------value=8
key=8---------value=9
key=9---------value=10
key=10---------value=11
key=11---------value=12
key=12---------value=13
key=13---------value=14
key=14---------value=15
key=15---------value=16
key=3---------value=4
key=5---------value=6
key=6---------value=100

2回目の出力結果を見ることができ、keyは3,5,6の値が後ろに並べられているのに対し、最近の最低使用値はデフォルトの自然順に前に並べられているので、最近の最低使用要素を取るには、そのまま順番に前に並べておけばOKです