前回は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(金) ぱんまる


コメント