【Android】【Java】SparseArray で foreach 
2014/01/19 Sun [edit]
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)を値でソートする
- 関連記事
トラックバック
トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/103-8dd13a07
この記事にトラックバックする(FC2ブログユーザー)
| h o m e |