Knowledge Log

【Java】データの管理が劇的にラクになる!Map(HashMap)の基本をマスターしよう

denson
1

はじめに

みなさんどうも、おげんです。

前回は、データをまとめて扱う「List」について学びました。

Listはデータを順番に並べておくのにとても便利でしたが、こんな風に思ったことはありませんか?

  • 「3番目のデータじゃなくて、『回復薬』の効果が知りたいんだ!」
  • 「特定の名前(キー)を使って、一瞬で中身を取り出したい」

Listでこれをやろうとすると、端から順番に「これは回復薬?」「これは毒消し?」と探していく必要があって、データが増えるほど大変になります。

そんな時に登場するのが、今回ご紹介する「Map(マップ)」です。

Mapを使えば、「名前(キー)」と「中身(値)」をセットにして保存できるので、辞書を引くように一瞬で目的のデータにアクセスできます。

プロの現場でも、ユーザーIDからユーザー情報を取り出したり、設定名から設定値を読み込んだりと、超一軍で使われるこの武器。今回も、一緒にマスターしていきましょう!

この記事はこんな人におすすめ!
  • Listでデータを探すのが「面倒だな」と感じ始めた人
  • 「名前」と「中身」をセットで管理したい人
  • 辞書や図鑑のような仕組みをプログラムで作ってみたい人
2

Mapとは「ラベル付きの箱」である

ListとMapの最大の違いは、「どうやってデータを取り出すか」にあります。

  • Listは「出席番号」管理 「1番の人!」「2番の人!」と番号で呼びます。中身が誰であれ、場所(インデックス)で管理するのがListです。
  • Mapは「ネームプレート」管理 箱の一つひとつに「ラベル(キー)」を貼ります。「おげんさんの箱!」「アリスさんの箱!」と、名前で呼び出します。

「キー」と「値」のペア

Mapの世界では、このセットをこう呼びます。

  • キー(Key): データを引き出すための「合言葉」や「ラベル」。重複はNG!
  • 値(Value): 箱の中に入っている「本体」。

例えば、RPGの「道具図鑑」を作るならこんな感じです。

  • キー:"回復薬" → 値:"HPを50回復する"
  • キー:"毒消し" → 値:"毒状態を治す"

なぜMapが「最強」なのか?

Listの場合、1,000個のデータの中から「毒消し」を探すには、最悪1,000回確認する必要があります。

でもMapなら、「『毒消し』をちょうだい!」と言うだけで、1,000個の中から一瞬で見つけ出してくれるんです。

このスピード感こそが、Mapが「辞書」と呼ばれる理由です。

3

HashMapの基本操作(putとget)

Javaで最もよく使われるMapの種類は、HashMap(ハッシュマップ)です。

まずは「データを入れる」ところから「取り出す」ところまで、RPGのアイテム図鑑を例に見てみましょう。

① データを入れる: put(キー, 値)

「この名前(キー)で、この中身(値)を保存してね!」と命令します。

// <キーの型, 値の型> を指定して作成
Map<String, String> itemDictionary = new HashMap<>();

// データを入れる(put)
itemDictionary.put("薬草", "HPを30回復する");
itemDictionary.put("毒消し", "毒状態を治す");
itemDictionary.put("聖水", "アンデッドにダメージ");

② データを取り出す: get(キー)

「『薬草』の中身を教えて!」と、キーを指定して呼び出します。

String effect = itemDictionary.get("薬草");
System.out.println("薬草の効果は:" + effect); 
// 出力:HPを30回復する

ここが注意!「上書き」のルール

Mapのキーは「重複NG」です。もし同じキーでもう一度 put すると、中身が新しいものに上書きされます。

itemDictionary.put("薬草", "HPを30回復する");
itemDictionary.put("薬草", "HPを100回復する"); // 上書き!

System.out.println(itemDictionary.get("薬草")); 
// 出力:HPを100回復する(古い方は消える)
4

Mapの全データを確認する(keySet)

Mapは「名前」で引き出すのが得意ですが、「今、図鑑に載っている全アイテムを表示したい!」という時もありますよね。

そんな時は、「まずラベル(キー)だけを全部集めて、それを順番に使う」というステップを踏みます。

「キーのセット」を取り出してループする

// 図鑑にあるすべての「アイテム名(キー)」を取り出す
for (String key : itemDictionary.keySet()) {
    // 取り出したキーを使って、中身(値)をゲット!
    String value = itemDictionary.get(key);
    System.out.println("【" + key + "】" + value);
}

なぜこう書くの?

MapはListと違って、「入れた順番」を覚えていないという特徴があります(※HashMapの場合)。

バラバラに箱が入っているイメージなので、まずは「どんな名前のラベルがあるかな?」と keySet() で一覧表をもらい、その一覧表を見ながら一つずつ箱を開けていく…という流れになるんです。

こんな時に便利!

  • ステータス画面: 「攻撃力」「防御力」「素早さ」などの項目名と数値を一気に表示する。
  • 設定一覧: アプリの設定項目をすべてリストアップする。

「キーがわかれば、値もわかる」。

この基本を拡張for文と組み合わせるのが、Mapを使い倒すコツです。

5

まとめ:適材適所で使い分けよう

今回は、特定の「名前」でデータを一瞬で引き出す 「Map(HashMap)」 について学びました。

最後に、「List」と「Map」の使い分けをシンプルにまとめておきます。

最強の組み合わせは「Map の中に List」

プロの現場では、これらを組み合わせて使うこともよくあります。

例えば、「クラス(Mapのキー)」 ごとに 「生徒たちのリスト(Listの値)」 を入れる、といった具合です。

データの持ち方を工夫するだけで、プログラムのコードは何十行も短く、そして読みやすくなります。

「どうやってデータを持たせれば、後で自分が楽できるかな?」

そう考えるようになったら、あなたはもう立派な設計者の卵です。

今回学んだ Map を使って、自分だけの「最強の図鑑」や「ステータス画面」を作ってみてくださいね!

今回も最後まで読んでいただき、ありがとうございました!

ABOUT ME
おげん
おげん
駆け出しエンジニア
文系未経験からエンジニアになるために挑戦を開始したアラサー。転職活動を終え、2026年4月からIT企業で勤務予定。自分が学習で苦労した経験を『誰かのための道しるべ』として発信中。
記事URLをコピーしました