JavaでMapを反復処理する4つの方法:entrySet、keySet、Iterator、forEach徹底解説
この記事では、JavaでMap(マップ)をループ処理するためのさまざまな方法を紹介します。Java 8以降では、従来のfor文やIteratorクラスに加えて、forEachメソッドを使った簡潔な反復処理も可能になりました。用途に応じて最適な手法を選べるよう、代表的な4つのパターンをサンプルコードとともに解説していきます。
1. エントリー(キーと値)をまとめて反復処理する
キーと値の両方を扱いたい場合は、entrySet()メソッドを使うのが最も一般的で効率的な方法です。Map.EntryからgetKey()とgetValue()でそれぞれ取得できます。
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
2. キーのみを反復処理する
キーだけが必要な場合は、keySet()メソッドを使用します。
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (Integer key : map.keySet()) {
System.out.println("Key = " + key);
}
3. 値のみを反復処理する
値だけを取り出したい場合は、values()メソッドが便利です。
for (Integer value : map.values()) {
System.out.println("Value = " + value);
}
- JavaでArrayListをループ処理する方法
4. Iteratorを使った反復処理
Iteratorクラスを使うと、より細かい制御が可能になります。特に、反復処理中に要素を削除したい場合などに有効です。
ジェネリクスを使用する場合
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry<Integer, Integer> entry = entries.next();
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
ジェネリクスを使用しない場合(レガシーコード向け)
古いバージョンのJavaでは、ジェネリクスなしで記述されていたコードも多く存在します。その場合は明示的なキャストが必要になります。
Map map = new HashMap();
Iterator entries = map.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry entry = (Map.Entry) entries.next();
Integer key = (Integer)entry.getKey();
Integer value = (Integer)entry.getValue();
System.out.println("Key = " + key + ", Value = " + value);
}
5. キーを反復処理して値を取得する
keySet()でキーを順に取り出し、get()メソッドで対応する値を検索する方法もあります。ただし、この方法はエントリー全体を直接反復処理するよりも効率が劣るため、特別な理由がない限りentrySet()の使用が推奨されます。
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (Integer key : map.keySet()) {
Integer value = map.get(key);
System.out.println("Key = " + key + ", Value = " + value);
}
6. Java 8のforEachを使った反復処理
Java 8以降では、ラムダ式を使ったforEachメソッドにより、非常に簡潔にMapを反復処理できます。可読性が高く、モダンなJavaコードでは広く使われている書き方です。
Map<String, Integer> items = new HashMap<>();
items.put("key 1", 1);
items.put("key 2", 2);
items.put("key 3", 3);
items.forEach((k,v)->System.out.println("Item : " + k + " Count : " + v));
まとめ
JavaでMapを反復処理する方法は複数ありますが、基本的には以下のように使い分けるのがおすすめです。
- キーと値の両方が必要 →
entrySet()を使う - キーのみ必要 →
keySet()を使う - 値のみ必要 →
values()を使う - 反復中に要素を削除したい →
Iteratorを使う - 簡潔さを重視(Java 8以降) →
forEachメソッドを使う
状況に応じて適切な手法を選択することで、より読みやすく効率的なコードを書くことができます。
-
JavaでArrayListをループ処理する5つの方法を徹底解説
このチュートリアルでは、JavaでArrayListを反復処理(イテレーション)する5つの異なる方法を紹介します。Java 8以降では、forEachメソッドやIteratorクラスを使ってArrayListをループ処理することも可能です。 ArrayListをループ処理する主な方法 ArrayListをループ処理する方法は、主に以下の5つがあります。 従来のfor文(クラシックForループ) 拡張for文 Iterator(イテレータ) while文 forEachメソッド(Java 8) まずは、各ループの例で使用するArrayListを作成しましょう。 import java.uti
-
JavaでMapを反復処理する4つの方法:entrySet、keySet、Iterator、forEach徹底解説
この記事では、JavaでMap(マップ)をループ処理するためのさまざまな方法を紹介します。Java 8以降では、従来のfor文やIteratorクラスに加えて、forEachメソッドを使った簡潔な反復処理も可能になりました。用途に応じて最適な手法を選べるよう、代表的な4つのパターンをサンプルコードとともに解説していきます。 1. エントリー(キーと値)をまとめて反復処理する キーと値の両方を扱いたい場合は、entrySet()メソッドを使うのが最も一般的で効率的な方法です。Map.EntryからgetKey()とgetValue()でそれぞれ取得できます。 Map<Integer, In