【Java入門】Mapにfor文やforeachのループを使いキーと値を取得する

こんにちは!エンジニアの中沢です。

JavaでMapからキー(key)と値(value)を取得したいと思ったことはありませんか?Mapからデータを取得するには、for文などのループ処理と、entrySetメソッドを使うのが便利です!今回は、for文の他にもIteratorのループ処理でMapからデータを取得する方法解説します!

この記事では、

  • for文と拡張for文(for-each文)とは
  • Mapのキー(key)をkeySetメソッドで取得する方法
  • Mapの値(value)をvaluesメソッドで取得する方法
  • という基本的な内容から、「Iteratorとは」「Iteratorのループ処理でMapのキーと値を取得する方法」などの応用的な使い方に関しても解説していきます。今回はこれらの方法を覚えるために、Mapにfor文やforeachのループを使いキーと値を取得する方法をわかりやすく解説します!

    for文と拡張for文(for-each文)の使い方

    Javaには他の言語で使われるforeach文はありません!

    しかし、foreach文と同じような処理を行う拡張for文というものがあります!拡張for文は次のように使います。

    for(型 変数名 : List名){
        System.out.println(変数名);
    }

    拡張for文の使い方を覚えるために次のプログラムでfor文と比較して使い方を確認してみましょう。

    import java.util.ArrayList;
    import java.util.List;
    
    public class Main {
    
        public static void main(String[] args) {
    
            List<String> list = new ArrayList<>();
    
            list.add("samurai");
            list.add("engineer");
    
            // 拡張for文(for-each文)の使い方
            for (String s : list) {
                System.out.println(s);
            }
            System.out.println("拡張for文(for-each文)で取得しました!");
    
            // for文の使い方
            for (int i = 0; i < list.size(); i++) {
                System.out.println(list.get(i));
            }
            System.out.println("for文で取得しました!");
        }
    }
    [実行結果]
    samurai
    engineer
    拡張for文(for-each文)で取得しました!
    samurai
    engineer
    for文で取得しました!

    ここでは拡張for文とfor文を使ってListのすべての要素を順番に表示しています。このように拡張for文を使うことで、他言語のforeach文のようにすっきりしたコードを書くことができます!

    Mapのキーと値を拡張for文のループで取得する

    Mapのキー(key)をkeySetメソッドで取得する方法

    ここではMapのキーを拡張for文を使って順番に取得する方法を解説します。次のプログラムではMapのキーをkeySetメソッドで取得して、拡張for文で順番に表示しています。

    import java.util.HashMap;
    import java.util.Map;
    
    public class Main {
    
    	public static void main(String[] args) {
    
    		Map<String, String> map = new HashMap<>();
    		map.put("samurai", "侍");
    		map.put("engineer", "エンジニア");
    
    		for (String key : map.keySet()) {
    			System.out.println(key);
    		}
    	}
    }
    
    [実行結果]
    samurai
    engineer

    このようにkeySetメソッドと拡張for文を使うことで、Mapのキーを取得することができました!

    Mapの値(value)をvaluesメソッドで取得する方法

    次はMapの値を拡張for文を使って順番に取得する方法を解説します。次のプログラムではMapの値をvaluesメソッドで取得して、拡張for文で順番に表示しています。

    import java.util.HashMap;
    import java.util.Map;
    
    public class Main {
    
    	public static void main(String[] args) {
    
    		Map<String, String> map = new HashMap<>();
    		map.put("samurai", "侍");
    		map.put("engineer", "エンジニア");
    
    		for (String val : map.values()) {
    			System.out.println(val);
    		}
    	}
    }
    
    [実行結果]
    侍
    エンジニア

    このようにvaluesメソッドと拡張for文を使うことで、Mapの値を取得することができました!

    Mapのキーと値の両方をentrySetメソッドで取得する方法

    最後に、Mapのキーと値の両方を拡張for文を使って順番に取得する方法を解説します。次のプログラムではMapのキーと値のペア(エントリー)をentrySetメソッドで取得しています。

    その後に拡張for文の中でgetKeyメソッドgetValueメソッドを使い、キーと値をそれぞれ取得して順番に表示しています。

    import java.util.HashMap;
    import java.util.Map;
    
    public class Main {
    
        public static void main(String[] args) {
    
            Map<String, String> map = new HashMap<>();
            map.put("samurai", "侍");
            map.put("engineer", "エンジニア");
    
            for (Map.Entry<String, String> entry : map.entrySet()) {
                System.out.println(entry.getKey() + " : " + entry.getValue());
            }
        }
    }
    [実行結果]
    samurai : 侍
    engineer : エンジニア

    このようにentrySetメソッドと拡張for文を使うことで、Mapのキーと値を取得することができました!

    Mapのキーと値をIteratorのループで取得する

    Iteratorとは

    IteratorとはListやMapなどで、すべての要素に対して順番に処理をする機能のことです。MapにはListのように要素番号(index)がありませんが、Iteratorを使えばすべての要素を処理することができます!

    Iteratorは次の要素がなくなるまで処理を続けるので、要素数がいくつあるのかを気にすることなく使えます!

    Iteratorのループ処理でMapのキーと値を取得する方法

    最後にIteratorを使ってMapのキーと値を取得する方法を解説します。Iteratorの使い方を覚えるために次のプログラムを見てみましょう。

    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    
    public class Main {
    
    	public static void main(String[] args) {
    
    		Map<String, String> map = new HashMap<>();
    		map.put("samurai", "侍");
    		map.put("engineer", "エンジニア");
    
    		for (Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator(); iterator.hasNext();) {
    			Map.Entry<String, String> entry = iterator.next();
    			System.out.println(entry.getKey() + " : " + entry.getValue());
    		}
    	}
    }
    [実行結果]
    samurai : 侍
    engineer : エンジニア

    ここでは、IteratorにMapのすべてのキーと値のペア(エントリー)をmap.entrySet().iterator()で設定して、iterator.hasNext()で次の要素がなくなるまでループ処理をしています。次にiterator.next()で一組のキーと値のペア取得しています。

    最後にキーと値のペアからgetKeyメソッドとgetValueメソッドで、キーと値をそれぞれ取得して表示しています。

    Listのループ処理をする方法

    この記事ではMapのループ処理について学んできましたが、Listのループ処理について学びたい場合は次の記事で詳しく解説しています!

    Mapの使い方総まとめ

    Mapについてさらに詳しく知りたいときはこちらの記事を確認してください!

    拡張for文とJava8のforEachの使い方総まとめ

    拡張for文とJava8のforEachの使い方についてさらに詳しく知りたいときはこちらの記事を確認してください!

    まとめ

    いかがでしたか?今回はループ処理でMapのキーと値を取得する方法を解説しました拡張for文はコードを簡潔に書くことができるのでぜひ覚えてくださいね。もしMapのループ処理を忘れてしまったらこの記事を確認してください!

    LINEで送る
    Pocket

    SEからWebエンジニアへ転職した理由

    侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

    SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

    弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

    「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
    更新日 : 2019年10月7日

    書いた人

    中沢 丈

    中沢 丈

    フリーランスエンジニア。
    システム開発からコンテンツ作成まで幅広く対応します。

    連絡先はこちらです。
    [email protected]

    おすすめコンテンツ

    あなたにぴったりなプログラミング学習プランを無料で診断!

    プログラミング学習の効率を劇的に上げる学習メソッドを解説