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);
参考まで、初期容量と負荷係数の実験。