PR

【Java】HashMapとは?keyとvalueの使い方を初心者向けに1から解説

HashMapの記事内容を表すJavaカテゴリ用のunDraw背景アイキャッチ画像 Java

JavaのHashMapとは、keyを使ってvalueを取り出すMapの代表的な実装です。

Listが『0番目、1番目』のように位置で読む入れ物なら、HashMapは『userIdというkeyに対応する値』のように名前付きで読む入れ物です。

HashMapは『順番で探す箱』ではありません。『keyで値を引く辞書』のように見るとつかみやすいです。

この記事では、HashMapの意味、Listとの違い、putgetcontainsKeyの基本、順番を保証しない点、初心者がつまずきやすいポイントを整理します。

この記事はコレクションフレームワーク全体の説明ではなく、HashMapだけに絞った補助記事です。ListやMapの全体像を先に見たい場合は、コレクションフレームワークの記事を親記事として読んでください。

スポンサーリンク

まず結論:HashMapはkeyでvalueを探すMap

HashMapはMapインターフェースの代表的な実装です。OracleのAPI仕様では、HashMapはハッシュ表ベースのMap実装であり、順序を保証しないと説明されています。

次の図では、『keyを渡すとvalueが返る』という最小モデルだけを見てください。

HashMapがkeyからvalueを取り出す流れを示した図
HashMapは『何番目か』ではなく、『どのkeyか』で値を取り出す入れ物です。

Listとの違い

比較ListHashMap
探し方番号で読むkeyで読む
追加add(value)put(key, value)
取得get(index)get(key)
向く場面順番に並ぶデータIDや名前で引きたいデータ

ListやMap全体の位置づけは、コレクションフレームワークの記事と合わせて読むと整理しやすいです。

まずはこのコードを読めればOK

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

Map<String, String> users = new HashMap<>();
users.put("u001", "Sato");
users.put("u002", "Suzuki");

System.out.println(users.get("u001")); // Sato

このコードでは、u001というkeyにSatoというvalueを結びつけています。get("u001")と書くと、そのkeyに対応するvalueを取得できます。

Map<String, String>の意味が不安な場合は、ジェネリクスの記事を先に押さえると読みやすくなります。

put・get・containsKeyの基本

メソッド役割
put()keyとvalueを登録するusers.put("u003", "Tanaka")
get()keyに対応するvalueを取得するusers.get("u001")
containsKey()keyが存在するか確認するusers.containsKey("u002")
remove()keyごと削除するusers.remove("u001")

同じkeyでputすると、以前のvalueは新しいvalueに置き換わります。

users.put("u001", "Sato");
users.put("u001", "Yamada");

System.out.println(users.get("u001")); // Yamada

forEachで中身を見る

HashMapの中身を順に見たいときは、entrySet()を使う書き方がよく出てきます。

for (Map.Entry<String, String> entry : users.entrySet()) {
    System.out.println(entry.getKey() + ": " + entry.getValue());
}

ここでは『keyとvalueの1組』をentryとして取り出しています。最初は細かい型を全部暗記するより、『Mapの中身を1件ずつ読む形』として見れば十分です。

HashMapは順番を保証しない

HashMapは、追加した順番で取り出せることを保証しません。表示順をそのまま意味のある順番として使いたい場合には注意が必要です。

順番が大事な場面では別のMap実装を検討しますが、初心者の段階ではまず『HashMapはkeyで引くための入れ物で、順番の箱ではない』と理解しておくのが先です。

初心者がつまずきやすいポイント

つまずきまずこう理解する
同じkeyを2回putする後のvalueで上書きされる
存在しないkeyをgetする基本はnullが返るので確認が必要
表示順が一定だと思うHashMapは順番を保証しない
keyの比較が分からない比較の背景にはequals/hashCodeが関わる

key比較の考え方を次に進めたい場合は、まずequalsメソッドを確認すると理解の足場ができます。

getだけでなくcontainsKeyを見る理由

HashMapでは、存在しないkeyをgetしたときにnullが返ることがあります。そのため、valueとしてnullを入れる設計にしていると、『keyがないのか』『valueがnullなのか』が分かりにくくなります。

if (users.containsKey("u003")) {
    System.out.println(users.get("u003"));
} else {
    System.out.println("そのユーザーは登録されていません");
}

このようにcontainsKeyで存在確認してからgetすると、初心者でも分岐の意味を追いやすくなります。単にgetの結果だけを見るより、keyがあるかどうかを先に確認するコードとして読むのがポイントです。

keyにする値の注意点

HashMapのkeyには、あとから意味が変わりにくい値を使うのが基本です。たとえばユーザーIDや商品コードのように、同じものを指す安定した値はkeyに向いています。

逆に、途中で中身が変わるオブジェクトをkeyにすると、後から取り出せなくなるような分かりにくい問題につながることがあります。この詳しい背景にはequalshashCodeが関係しますが、初心者のうちは『keyは安定した値にする』と覚えておくと安全です。

HashMapは便利ですが、何でも入れればよい入れ物ではありません。何をkeyにし、何をvalueにするのかを先に言葉で説明できる形にしてから使うと、コードも読みやすくなります。

よくある疑問

HashMapにnullは入れられる?

HashMapでは、nullのkeyやnullのvalueを扱えます。ただし初心者向けには、最初からnullを積極的に使うより、keyがない状態とvalueがnullの状態を混ぜない設計にした方が読みやすくなります。

順番どおりに表示したいときは?

HashMapは順番を保証しないため、追加順の表示を前提にしたコードには向きません。表示順が大事な画面処理では、HashMapだけで解決しようとせず、順番を持つ別の構造や並び替え処理を検討します。この記事ではまず、HashMapの役割を『keyで引く』に絞って覚えましょう。

いつListではなくHashMapを選ぶ?

番号で順番に処理するならList、IDや名前のようなkeyで1件を取り出したいならHashMapが向いています。たとえばユーザーIDからユーザー名を引く、設定名から設定値を引く、といった場面ではHashMapの考え方が自然です。

迷ったときは、データを説明する日本語に注目します。『何番目のデータ』と言いたいならList寄り、『このIDのデータ』と言いたいならHashMap寄りです。key/valueを先に言葉で決めると、Mapの型やメソッド選びも自然に決まります。

公式情報と関連して読みたい記事

まとめ

HashMapは、keyからvalueを取り出すためのMapです。

  • putで登録し、getで取得する
  • containsKeyで存在確認する
  • 同じkeyは後からputしたvalueで上書きされる
  • HashMapは追加順を保証しない

HashMapを読めるようになると、ID付きデータや設定値を扱うJavaコードがかなり追いやすくなります。

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