読者です 読者をやめる 読者になる 読者になる

うさがにっき

読書感想文とプログラムのこと書いてきます

HashMap[int, int]使うならSparseIntArray使ったほうが効率的

概要

API1からあったのに知らなくって恥ずかしいシリーズ
SparseIntArrayを使ったほうがHashMap[int, int]を使うよりいいよっていうのをまとめた

詳細

SparseIntArrayとはHashMapの[int, int]に特化したクラス
公式ドキュメントに

SparseIntArrays map integers to integers. Unlike a normal array of integers, there can be gaps in the indices. It is intended to be more memory efficient than using a HashMap to map Integers to Integers, both because it avoids auto-boxing keys and values and its data structure doesn't rely on an extra entry object for each mapping.

とあるようにメモリを効率的に使えるらしい

使い方は

private static final SparseIntArray ORIENTATIONS = new SparseIntArray();
static {
        ORIENTATIONS.append(Surface.ROTATION_0, 90);
        ORIENTATIONS.append(Surface.ROTATION_90, 0);
        ORIENTATIONS.append(Surface.ROTATION_180, 270);
        ORIENTATIONS.append(Surface.ROTATION_270, 180);
    }
…
ORIENTATIONS.get(rotation)

みたいに、定数としてkeyとvalueのセットを用意して、その中から対応した値を取得するみたいなのが多い様子

しかし、中身mapなのに名前Arrayって違和感すごい