FC2ブログ
ヽ|∵|ゝ(Fantom) の 開発blog? ホーム » Java »【Java】連想配列(Map)を foreach(for, forEach) で取り出す

【Java】連想配列(Map)を foreach(for, forEach) で取り出す  


 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);
}

[key = val]
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

key1 = value1
key2 = value2
key3 = value3

 ちなみに HashMapTreeMapLinkedHashMap に代えてもそのまま使える。これらの連想配列は保持しているデータの順番が違うらしい。上記のコードでそれぞれクラスを変えてみると、

HashMap:順不同
TreeMap:昇順
LinkedHashMap:追加した順

に値が出てくる(文字列順)。順を考えなければ何でも良いみたい。Java って同じような機能多いから、初めは迷うね。StringBufferStringBuilder とか。実行速度やマルチスレッドプログラミングかなどで変えた方が良いみたいだけどね。


(関連記事)
【Android】SparseArray で foreach
【Java】配列, リスト(List), 連想配列(Map) の初期化
【Java】連想配列(Map)を値でソートする


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



category: Java

thread: プログラミング

janre: コンピュータ

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


トラックバック

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

プロフィール

Social

検索フォーム

全記事一覧

カテゴリ

ユーザータグ

最新記事

リンク

PR