マル開発日記

マルAndroidデベロッパ

FastLruCache

 気になってしょうがなかったのでシングルスレッド用のFastLruCache作りました。古い端末ではちょっと早くなった気(?)がします。。

github.com

 本当は元のソースからsynchronizedだけ外したやつ作っても良かったけど、それもそれでどうかなぁと思ったので若干マイロジックで作ってます。AndroidのLruCacheはAndroidでカスタマイズしたLinkedHashMapを使っていたので、本家のJavaライブラリのLinkedHashMapをベースに作りました。本家のやつは一回で一個しかeldestエントリをremoveできないので、大変トリッキーなコードになってます。trimToSizeで毎回Iteratorオブジェクトを作っているのです。これはこれでどうなんだろうってコードです。JavaのMapはIteratorでしか順序アクセスできないのはどうなんだろうと思う次第です。でもsynchronizedでないLruCacheが試せたので、まぁゆっくり寝れそうです(笑)