【Java】連想配列(Map)を foreach(for, forEach) で取り出す 
2013/12/14 Sat [edit]
PHP や Perl に慣れてると Java の連想配列は使いづらい気がするね。データを外部化したとき、キーと値のセットでデータを作成しておいたので、読み込むときには連想配列を使っている。全ての値を取り出すには Iterator を使う手もあるけど、Map.Entry を使うとわりと foreach っぽく表記できるね。
import java.util.HashMap;
import java.util.Map;
Map<String, String> hash = new HashMap<String, String>();
//適当に代入
hash.put("key1", "value1");
hash.put("key3", "value3"); //わざと3
hash.put("key2", "value2"); //わざと2
//キーと値
System.out.println("[key = val]");
for (Map.Entry<String, String> e : hash.entrySet()) {
String key = e.getKey();
String val = e.getValue();
System.out.println(key + " = " + val);
}
//キーのみ
System.out.println("[keys]");
for (String e : hash.keySet()) {
System.out.println(e);
}
//値のみ
System.out.println("[values]");
for (String e : hash.values()) {
System.out.println(e);
}
key1 = value1
key2 = value2
key3 = value3
[keys]
key1
key2
key3
[values]
value1
value2
value3
また、Java8 ではラムダ式が使えるようになったので、forEach() で簡潔に書くこともできる。
//※定義は略(↑のものと同じ)
//キーと値
hash.forEach((key, val) -> System.out.println(key + " = " + val)); //Java8
key2 = value2
key3 = value3
ちなみに HashMap を TreeMap、LinkedHashMap に代えてもそのまま使える。これらの連想配列は保持しているデータの順番が違うらしい。上記のコードでそれぞれクラスを変えてみると、
HashMap:順不同
TreeMap:昇順
LinkedHashMap:追加した順
に値が出てくる(文字列順)。順を考えなければ何でも良いみたい。Java って同じような機能多いから、初めは迷うね。StringBuffer と StringBuilder とか。実行速度やマルチスレッドプログラミングかなどで変えた方が良いみたいだけどね。
(関連記事)
【Android】SparseArray で foreach
【Java】配列, リスト(List), 連想配列(Map) の初期化
【Java】連想配列(Map)を値でソートする
- 関連記事
トラックバック
トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/92-e425d5da
この記事にトラックバックする(FC2ブログユーザー)
| h o m e |