コース一覧
    Java入門:配列とコレクション
    Map を走査する

    Java入門:配列とコレクション

    配列とコレクションの扱いを学び、複数のデータを安全に整理・検索・集計できるようにします。

    1
    配列
    01. 配列の基本5分
    02. 配列の要素にアクセス5分
    03. 配列を for で走査5分
    04. Javaで配列の合計・平均を求める方法(forループ)5分
    05. 配列の平均5分
    06. 配列の最大値5分
    07. 配列の線形探索12分
    08. 拡張 for ループ5分
    09. 配列クイズ5分
    10. 第 6 章 まとめクイズ5分
    2
    コレクション基礎
    01. ArrayList を使う5分
    02. List を走査する5分
    03. 要素の削除と検索5分
    04. HashMap の基本5分
    05. Map を走査する5分
    06. Set で重複を排除5分
    07. Collections クラスの便利メソッド5分
    08. コレクション基礎 まとめクイズ5分

    Map を走査する

    キーで回すと、同じ場所を 2 回引くことになる

    Map の中身を全部見たいとき、まず思いつくのはキーの一覧を回す書き方です。

    Java

    for (String day : visits.keySet()) {
        System.out.println(day + " は " + visits.get(day) + " 人");
    }

    動きますが、keySet() からキーを 1 つ取り出すたびに、get(day) でもう一度同じ場所を探しに行っています。キーと値の両方を使う処理なら、はじめからペアで受け取るほうが素直です。

    その役をするのが entrySet() で、キーと値をひとまとめにした Map.Entry を順に返します。

    Java

    import java.util.LinkedHashMap;
    import java.util.Map;
    
    public class Demo {
        public static void main(String[] args) {
            Map<String, Integer> visits = new LinkedHashMap<>();
            visits.put("mon", 12);
            visits.put("tue", 8);
    
            for (Map.Entry<String, Integer> e : visits.entrySet()) {
                System.out.println(e.getKey() + " / " + e.getValue());
            }
        }
    }

    e.getKey() でキー、e.getValue() で値が取れます。値しか使わないなら values() を回す手もありますが、片方だけで足りる場面は意外と少ないものです。

    入れた順に出てこないと困る

    ここが Map の走査でいちばん引っかかるところです。HashMap は取り出す順番を保証しません。put した順に並ぶこともあれば、まったく違う順で出てくることもあり、こちらからは決められません。

    順番を守ってほしいなら LinkedHashMap を使います。

    Java

    Map<String, Integer> visits = new LinkedHashMap<>();  // put した順に出てくる
    Map<String, Integer> ranked = new TreeMap<>();        // キーの昇順に並ぶ

    使い方はどちらも HashMap と同じで、new するクラスを差し替えるだけです。左辺の型は Map のまま変えません。表示や集計の結果を毎回そろえたい場面では、迷わず LinkedHashMap を選んでください。

    つまずくところ

    Map.Entry は Map の中に入れ子で定義されている型です。import java.util.Map; を書いておけば Map.Entry<String, Integer> と書けます。java.util.Map.Entry まで import すれば Entry<String, Integer> と短くできますが、最初は入れ子のまま書くほうが迷いません。

    もう 1 つ、走査している最中に put や remove で中身を変えると ConcurrentModificationException が飛びます。entrySet() が返すのは中身のコピーではなく、Map をそのまま覗いている窓だからです。読むだけのループにしておけば起きません。

    課題では、順番が保証される Map を作り、ペアを 1 つずつ取り出しながら値を集計します。Map.Entry の型を書くところで手が止まりやすいので、上の例の書き方をよく見てから始めてください。

    要件

    1. クラス名は Solution、メソッド名は totalValue (引数なし、戻り値 int) にすること
    2. java.util.LinkedHashMap<String,Integer> を使い、apple=100 banana=80 cherry=200 の順に put すること
    3. map.entrySet() を for-each で走査し、e.getValue() を sum に足し合わせて return すること

    ヒント

    `LinkedHashMap` は `java.util.LinkedHashMap` です。フルパスで書くか `import java.util.LinkedHashMap;` を先頭に書きましょう

    `for-each` の型は `java.util.Map.Entry<String,Integer>` です。`map.entrySet()` を回すと `Entry` が 1 つずつ取れます

    値の合計だけ欲しい場合は `e.getValue()` を `sum` に加算します。`getKey()` は使わなくても問題ありません

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/05/19·更新 2026/08/26

    関連レッスン

    • Set で重複を排除

      Java の Set を使って、コレクションから重複した要素を取り除く方法を学びます。HashSet と LinkedHashSet と TreeSet の違い、Set ならではの API を整理しよう。

    • Collections クラスの便利メソッド

      java.util.Collections の sort / max / min / reverse / shuffle を使いこなして、List を自由自在に操作しよう。

    • コレクション基礎 まとめクイズ

      コレクション基礎 (List / Map / Set / Collections) の総まとめ。使い分けと内部の仕組みを 4 択クイズで確認する。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • 処理計算や代入を表す長方形
    • クラスデータと振る舞いを束ねる単位
    • ループ繰り返し処理。矢印で戻すか専用記号で示す
    • メソッドクラスに属する関数
    • 引数位置引数=順番で渡す。
    • 戻り値呼び出し元への返答を表す点線矢印
    main.java
    エディタを読み込んでいます

    メモ

    Map を走査する

    ⌘S で保存