Javaと情熱のあいだ

カステラとドーナツと珈琲

簡易メモリーキャッシュ

簡易のオブジェクト用メモリーキャッシュを実装します。
実装といってもLinkedHashMapを継承してチョット機能を追加するだけ。
機能一覧
・キャッシュするオブジェクトの最大個数を指定できる
・キャッシュが最大個数を超えた場合一番最後オブジェクトを削除する。
・キャッシュからオブジェクトを使用した場合、そのオブジェクトはキャッシュの先頭に再配置される。

    /**
     *
     * 実行。
     * @throws Exception 例外
     */
    public void execute() throws Exception {

        Cache cache = new Cache();

        for (int i = 0; i < 1000; i++) {

            cache.put("TEST_" + i, i);

            if (i % 5 == 0) {
                System.out.println(cache.get("TEST_" + 0));
            }

            if (i % 6 == 0) {
                System.out.println(cache.get("TEST_" + 1));
            }

            if (i % 7 == 0) {
                System.out.println(cache.get("TEST_" + 2));
            }


        }

        MapUtils.debugPrint(System.out, null, cache);
    }

    /**
    *
    * <HR>
    * <P>
    *  ■モジュール名 <BR>
    * <BLOCKQUOTE>
    *      Cache.java <BR>
    * </BLOCKQUOTE>
    * <P>
    *  ■クラス仕様 <BR>
    * <BLOCKQUOTE>
    *      Cacheクラスはメモリーキャッシュクラスです。<BR>
    * </BLOCKQUOTE>
    * <P>
    * <HR>
    * <P>
    */
    public static class Cache extends LinkedHashMap{

       /**
        * 最大レコード数
        */
       private static final int MAX_SIZE = 100;

       /**
        * 初期容量
        */
       private static final int INITIAL_CAPACITY = 50;

       /**
        * 負荷係数
        */
       private static final float LOAD_FACTOR = 0.75f;

       /**
        * 順序モード
        */
       private static final boolean ACCESS_ORDER = true;

       /**
        *
        * コンストラクタ。
        */
       public Cache() {
           super(INITIAL_CAPACITY, LOAD_FACTOR, ACCESS_ORDER);
       }

       /**
        *
        * 削除判定を設定します。
        * @param eldest 判定
        * @return 削除判定
        */
       @Override
       protected boolean removeEldestEntry(Entry eldest) {
           if (this.size() < MAX_SIZE) {
               return false;
           }
           else {
               return true;
           }
       }

    }