FC2ブログ
ヽ|∵|ゝ(Fantom) の 開発blog? ホーム » Android »【Android】【Java】SparseArray で foreach

【Android】【Java】SparseArray で foreach  


 ADV システムっぽいのを作っていると、IDと値(文字列やオブジェクト)という組み合わせを使うことが多い。IDが連番のものなら普通の配列を使うことも多いんだけど、IDが飛び番号できるようにするには連想配列を使う。ただ、連想配列にはいくつか種類があるので、用途で使い分けるのが良いかもしれない。IDが数値の場合は、ソートされたリストを取得するには TreeMap を、ソートの必要なく、put() のパフォーマンスが欲しいときには HashMap を使うとかね。で、その HashMap を使おうと思ったら、「キーが int 型なら、SparseArray の方がパフォーマンス良いよ」みたいな警告が Eclipse で出た。

 ググってみたら、get() のパフォーマンス HashMap > SparseArray、put() のパフォーマンス SparseArray > HashMap らしい。

(参考) AndroidのSparseArrayは本当に速いのか測定してみた

 もうひとつ気になったのは、やはりどういう順番で値が出てくるかなのでやってみた。

SparseArray<String> data = new SparseArray<String>();

data.put( 5, "value5");
data.put( 12, "value12");
data.put( 1, "value1");
data.put(100, "value100");

for (int i = 0; i < data.size(); i++) {
int key = data.keyAt(i);
String val = data.valueAt(i);
}

 結果は数値の順に出てくる。

key = 1 / val = value1
key = 5 / val = value5
key = 12 / val = value12
key = 100 / val = value100

 ついでに、TreeMap とのコード比較。

Map<Integer, String> data = new TreeMap<Integer, String>();

data.put( 5, "value5");
data.put( 12, "value12");
data.put( 1, "value1");
data.put(100, "value100");

for (Map.Entry<Integer, String> e : data.entrySet()) {
int key = e.getKey();
String val = e.getValue();
}

 結果的には同じ。見易さもコードの長さも大差ない。これもパフォーマンスなど用途によって使い分けるのが良いのかな。ただし、SparseArray は Android 用 API だけどね。


(関連記事)
【Java】連想配列(Map)を foreach(for, forEach) で取り出す
【Java】連想配列(Map)を値でソートする


関連記事
スポンサーサイト



category: Android

thread: プログラミング

janre: コンピュータ

tag: 連想配列  配列操作 
tb: 0   cm: --


トラックバック

トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/103-8dd13a07
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

Social

検索フォーム

全記事一覧

カテゴリ

ユーザータグ

最新記事

リンク

PR