Cache Using Linked Hash Map

Updated: 2003-03-12 22:16:19 - [ Home | Wiki Home | Index | Changes ]

LinkedHashMap を使うとオブジェクトのキャッシュが簡単に作れます。

目次

サンプル
ポイント
アクセス順で作成するためのコンストラクタ

サンプル

上のサンプルプログラムの出力は次のようになります。


-- putのたびに、removeEldestEntryが呼ばれます。
remove (a=Alpha)?: false
remove (a=Alpha)?: false
remove (a=Alpha)?: false
remove (a=Alpha)?: false
remove (a=Alpha)?: false

-- putした順番で取得できます。
{a=Alpha, b=Bravo, c=Charlie, d=Delta, e=Echo}

-- アクセスオーダーをtrueにしたのでgetすると順番が変わります。
get: Charlie
{a=Alpha, b=Bravo, d=Delta, e=Echo, c=Charlie}

-- もう一度。getで順番が変わります。
get: Bravo
{a=Alpha, d=Delta, e=Echo, c=Charlie, b=Bravo}

-- removeEldestEntryがtrueを返すと、古いものから削除されていきます。
remove (a=Alpha)?: false
remove (a=Alpha)?: true
remove (d=Delta)?: true
{e=Echo, c=Charlie, b=Bravo, f=Foxtrot, g=Golf, h=Hotel}

ポイント

→ removeEldestEntry をオーバーライドして、アクセス順に設定すると、一番使われていないオブジェクトから捨てていくキャッシュが作れます。

アクセス順で作成するためのコンストラクタ

引数は3つです。

LinkedHashMap map = new LinkedHashMap(16, 0.75f, true);

参考まで、初期容量と負荷係数の実験


KOSEKI Kengo <kengo@tt.rim.or.jp>