【プログラミングしてみよう24】JavaのMapでキーと値をセットで管理する(HashMap入門)

Java

前回はjava.util.loggingを使ったログ出力の基礎を学びました。

今回は「Map」について解説します。 ArrayListは番号(インデックス)でデータを管理しましたが、Mapを使うと「キー」と「値」をセットで管理できます。たとえば「名前→電話番号」「商品コード→価格」のような対応関係を扱うのに向いています。

Mapの基本

Map はキーと値のペアを管理するインターフェースです。キーから値を素早く取り出せるのが特徴で、同じキーを2つ登録することはできません。

Javaでよく使われるMapの実装クラスは以下の2つです。

  • HashMap: 順番は保証されないが、検索が高速
  • LinkedHashMap: 登録した順番を保持する

今回は最もよく使われる HashMap を中心に解説します。使うにはインポートが必要です。

import java.util.HashMap;
import java.util.Map;

基本的な書き方はArrayListと似ています。

Map<キーの型, 値の型> 変数名 = new HashMap<>();

サンプルコード(HashMapの基本操作)

ファイル作成

「Java13」フォルダに HashMapTest.java という名前でファイルを作成します

コード入力

以下のコードを入力します。

import java.util.HashMap;
import java.util.Map;

public class HashMapTest {
    public static void main(String[] args) {
        Map<String, String> phoneBook = new HashMap<>();

        // データの追加
        phoneBook.put("ぱんまる", "090-1234-5678");
        phoneBook.put("たろう", "080-9876-5432");
        phoneBook.put("はなこ", "070-1111-2222");

        // キーで値を取得
        System.out.println("登録件数:" + phoneBook.size());

        // 値の取得
        System.out.println("\n--- 個別検索 ---");
        String key = "ぱんまる";
        if (phoneBook.containsKey(key)) {
            System.out.println(key + "は登録されています");
        }

        // すべてのキーと値を表示
        System.out.println("\n--- 電話帳一覧 ---");
        for (Map.Entry<String, String> entry : phoneBook.entrySet()) {
            System.out.println(entry.getKey() + " : " + entry.getValue());
        }

        // キーの削除
        phoneBook.remove("たろう");
        System.out.println("\n「たろう」を削除しました");
        System.out.println("登録件数:" + phoneBook.size());
    }
}

コンパイル

javac HashMapTest.java

実行

java HashMapTest

実行結果は次のようになります(HashMapは順番が保証されないため、一覧の表示順は毎回異なる場合があります)。

登録件数:3

--- 個別検索 ---
ぱんまるは登録されています

--- 電話帳一覧 ---
たろう : 080-9876-5432
はなこ : 070-1111-2222
ぱんまる : 090-1234-5678

「たろう」を削除しました
登録件数:2

サンプルコード(Mapの活用例)

MapとStream APIを組み合わせた、単語の出現回数を数えるプログラムを作ってみましょう。

ファイル作成

「Java13」フォルダに WordCount.java という名前でファイルを作成します

コード入力

以下のコードを入力します。

import java.util.HashMap;
import java.util.Map;

public class WordCount {
    public static void main(String[] args) {
        String[] words = {"apple", "banana", "apple", "cherry", "banana", "apple"};

        Map<String, Integer> countMap = new HashMap<>();

        for (String word : words) {
            if (countMap.containsKey(word)) {
                countMap.put(word, countMap.get(word) + 1);
            } else {
                countMap.put(word, 1);
            }
        }

        System.out.println("--- 単語の出現回数 ---");
        for (Map.Entry<String, Integer> entry : countMap.entrySet()) {
            System.out.println(entry.getKey() + " : " + entry.getValue() + "回");
        }
    }
}

コンパイル

javac WordCount.java

実行

java WordCount

実行結果は次のようになります。

--- 単語の出現回数 ---
banana : 2回
apple : 3回
cherry : 1回

コードの解説

phoneBook.put("ぱんまる", ...) のように、put(キー, 値) でデータを追加します。すでに同じキーが存在する場合は値が上書きされます。get(キー) で値を取り出し、remove(キー) でキーと値のペアを削除できます。size() は登録されているペアの数を返します。

containsKey(キー) はそのキーが存在するかどうかを true/false で返します。存在しないキーに対して get() を呼ぶと null が返るため、前回学んだOptionalや containsKey() でチェックしてから使う習慣をつけましょう。

entrySet() はMapの全ペアを Map.Entry のセットとして返します。拡張for文と組み合わせることで、entry.getKey() でキー、entry.getValue() で値をそれぞれ取り出しながら全件ループできます。

単語カウントの例では、すでにキーが存在する場合は現在の値に1を加えて put() し直し、存在しない場合は1で新規登録しています。この「カウントアップ」パターンはMapの典型的な使い方のひとつです。なお、getOrDefault(キー, デフォルト値) を使うと同じ処理をより簡潔に書けます。

countMap.put(word, countMap.getOrDefault(word, 0) + 1);

getOrDefault はキーが存在すればその値を、存在しなければ第2引数のデフォルト値を返します。

まとめ

Mapを使うことで、キーと値をセットにしてデータを管理できます。put で追加、get で取得、remove で削除、containsKey でキーの存在確認、entrySet で全件ループと、基本的な操作を覚えておきましょう。ArrayListが順番でデータを管理するのに対し、Mapはキーからデータを素早く引き出すのに向いています。電話帳・設定値・単語カウントなど、「名前から何かを引く」ような場面ではMapが力を発揮します。

2026/07/03(金) ぱんまる

コメント

タイトルとURLをコピーしました