LongSparseArray
たとえば、特定の機能を高速化するために、あるテーブルのクエリ結果をキャッシュしたいとする。
無為にクエリ結果をキャッシュするのは避けるべき。
キャッシュすると、データベースのACID特性が損なわれ、ヒープを大量に消費する。
こういうとき、HashMapがまず頭に浮かぶ。それも悪くない方法だけど、AndroidではKeyを固定することによって高速化を実現したSparseArrayが提供されている。
class | Key | Value |
---|---|---|
SparseArray | int | Object |
SparseBooleanArray | int | boolean |
SparseIntArray | int | int |
と こ ろ が 、Androidの提供するデータベース(SQLite)の_IDはlong型、SparseArrayのキーはint型。結局、SparseArrayは使えない。
存在を知ったときに期待しただけ、使えないと知った時の落胆は大きかった。
解決
キーがlong型のSparseArrayが提供されている。公開はAPI Level 16 (4.2)から。もちろんsupport.v4ライブラリに含まれている。
class | Key | Value |
---|---|---|
LongSparseArray | long | Object |
HashMap同様、LongSpaseArrayのコンストラクタにもinitialCapacityを指定できる。
パフォーマンス向上を期待して使うわけだから、適切な値を設定すること。
参考
HashMapとSparseArrayの性能比較を検証した記事。すごく役に立ちます。