JavaのHashMapとは、keyを使ってvalueを取り出すMapの代表的な実装です。
Listが『0番目、1番目』のように位置で読む入れ物なら、HashMapは『userIdというkeyに対応する値』のように名前付きで読む入れ物です。

HashMapは『順番で探す箱』ではありません。『keyで値を引く辞書』のように見るとつかみやすいです。
この記事では、HashMapの意味、Listとの違い、put・get・containsKeyの基本、順番を保証しない点、初心者がつまずきやすいポイントを整理します。
この記事はコレクションフレームワーク全体の説明ではなく、HashMapだけに絞った補助記事です。ListやMapの全体像を先に見たい場合は、コレクションフレームワークの記事を親記事として読んでください。
まず結論:HashMapはkeyでvalueを探すMap
HashMapはMapインターフェースの代表的な実装です。OracleのAPI仕様では、HashMapはハッシュ表ベースのMap実装であり、順序を保証しないと説明されています。
次の図では、『keyを渡すとvalueが返る』という最小モデルだけを見てください。

Listとの違い
| 比較 | List | HashMap |
|---|---|---|
| 探し方 | 番号で読む | 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にすると、後から取り出せなくなるような分かりにくい問題につながることがあります。この詳しい背景にはequalsとhashCodeが関係しますが、初心者のうちは『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です。
HashMapを読めるようになると、ID付きデータや設定値を扱うJavaコードがかなり追いやすくなります。
