Java
 Computer >> コンピューター >  >> プログラミング >> Java

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メソッドを使う

状況に応じて適切な手法を選択することで、より読みやすく効率的なコードを書くことができます。

  1. 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

  2. JavaでMapを反復処理する4つの方法:entrySet、keySet、Iterator、forEach徹底解説

    この記事では、JavaでMap(マップ)をループ処理するためのさまざまな方法を紹介します。Java 8以降では、従来のfor文やIteratorクラスに加えて、forEachメソッドを使った簡潔な反復処理も可能になりました。用途に応じて最適な手法を選べるよう、代表的な4つのパターンをサンプルコードとともに解説していきます。 1. エントリー(キーと値)をまとめて反復処理する キーと値の両方を扱いたい場合は、entrySet()メソッドを使うのが最も一般的で効率的な方法です。Map.EntryからgetKey()とgetValue()でそれぞれ取得できます。 Map<Integer, In