カテゴリ: Java 更新日: 2026/01/04

JavaのHashMapクラスを完全ガイド!初心者でもわかる連想配列の使い方

HashMap クラス
HashMap クラス

先生と生徒の会話形式で理解しよう

生徒

「先生、Javaでキーと値をペアで保存する方法ってありますか?例えば名前と年齢を一緒に管理したいんです。」

先生

「Javaではjava.utilパッケージに含まれているHashMapクラスを使うと、キーと値をセットで保存できますよ。」

生徒

「HashMapって聞いたことありますけど、具体的にどんな特徴があるんですか?」

先生

「順番には依存しないけれど、高速にデータを保存したり検索したりできるのが特徴ですね。では一緒に使い方を見ていきましょう!」

1. HashMapとは?

1. HashMapとは?
1. HashMapとは?

JavaのHashMapは、java.utilパッケージに含まれている代表的なコレクションクラスで、データを「キー」と「値」のペアで管理するための仕組みです。プログラミングが初めての人にとっては少し聞き慣れない言葉ですが、「名前から電話番号を調べる電話帳」や「会員番号から会員名を探す会員名簿」のようなイメージを持つと理解しやすくなります。

配列やArrayListは「順番(インデックス)」でデータを取り出しますが、HashMapは「キー」と呼ばれるラベルを使ってデータにアクセスします。例えば「Taro」という文字列をキーにして「20」という年齢を保存しておくと、「Taro」というキーを指定するだけで素早く年齢を取り出せます。このように、現実世界の「○○に対応する△△」という情報を、そのままプログラムの中で表現できるのがHashMapの大きな特徴です。

また、HashMapではキーごとに値が一つずつ対応するため、同じキーで何度も登録すると最後に登録した値で上書きされます。これは「同じ会員番号に二人分の情報は持てない」といった感覚に近く、現実のルールとも似ています。プログラミング未経験の方でも、この「キーと値のペア」「現実の名簿や一覧表に近い」というイメージを持っておくと、後で出てくるメソッドの使い方も理解しやすくなります。

イメージをつかみやすくするために、まずはとても簡単なサンプルを見てみましょう。ここでは、色の名前をキーとして、日本語の色名を値にして管理しています。


import java.util.HashMap;

public class SimpleHashMapSample {
    public static void main(String[] args) {
        HashMap<String, String> colors = new HashMap<>();

        // 色の名前と日本語の色名を対応付けて保存
        colors.put("red", "赤");
        colors.put("blue", "青");

        // キー"red"から対応する色名を取り出す
        String value = colors.get("red");
        System.out.println("redに対応する色は:" + value);
    }
}

このサンプルでは、「red」という英単語をキーにして、「赤」という日本語の色名を値として保存しています。そして、「red」というキーを使ってHashMapから値を取り出し、画面に表示しています。ここで大事なのは、配列のように「0番目」「1番目」という番号ではなく、「red」「blue」といった意味のあるキーでデータを管理している点です。小さなサンプルですが、これがJavaで連想配列や辞書のようなデータ構造を扱うときの基本的な考え方になります。

2. HashMapの基本的な使い方

2. HashMapの基本的な使い方
2. HashMapの基本的な使い方

HashMapを使うときは、まず変数の型とキー・値の型を決めてからオブジェクトを生成し、そのあとでputメソッドでデータを登録します。登録したあとは、getメソッドでキーに対応する値を取得する、という流れが基本です。ここでは、名前をキー、年齢を値として管理するシンプルなサンプルで、JavaのHashMapによる連想配列の使い方を確認してみましょう。


import java.util.HashMap;

public class HashMapExample {
    public static void main(String[] args) {
        // キーがString、値がIntegerのHashMapを作成
        HashMap<String, Integer> map = new HashMap<>();

        // データを登録(putメソッド)
        map.put("Taro", 20);
        map.put("Hanako", 22);
        map.put("Jiro", 18);

        // キーから値を取り出す(getメソッド)
        Integer hanakoAge = map.get("Hanako");
        System.out.println("Hanakoの年齢は " + hanakoAge + " 歳です。");

        // 存在しないキーを指定した場合
        Integer unknownAge = map.get("Unknown");
        System.out.println("Unknownの年齢は " + unknownAge + " です。");
    }
}

Hanakoの年齢は 22 歳です。
Unknownの年齢は null です。

上のコードでは、HashMap<String, Integer>という形で「キーは文字列(名前)」「値は整数(年齢)」というルールを決めています。put("Taro", 20)のように呼び出すと、「Taro」というキーと「20」という値がペアで保存され、あとからget("Taro")と指定することで、対応する年齢を取り出せます。このように、配列のような番号ではなく、意味のあるキーを使って値にアクセスできるのがHashMapの基本的な使い方です。

また、存在しないキーをgetした場合はnullが返ってきます。上の例では、「Unknown」という名前は一度も登録していないため、map.get("Unknown")の結果はnullになり、そのまま画面にもnullと表示されています。実際のJavaプログラムでは、「値が見つからなかった」という意味で返されたnullをチェックしながら処理を進めることが多く、HashMapを使ったデータ検索ロジックではとてもよく登場するパターンです。

このように、HashMapでは「登録するときはput」「取り出すときはget」というシンプルな考え方さえ押さえておけば、名前と年齢、商品コードと価格、会員IDと会員名など、さまざまな組み合わせのデータ管理に応用できます。まずは小さなサンプルから試して、キーと値がセットで動いている感覚に慣れていくと、後の応用もスムーズになります。

3. 主なメソッド一覧

3. 主なメソッド一覧
3. 主なメソッド一覧

初心者がよく使うHashMapのメソッドを整理しておきましょう。

  • put(key, value):キーと値を登録する
  • get(key):キーに対応する値を取得する
  • remove(key):キーに対応する要素を削除する
  • containsKey(key):指定したキーが存在するか確認する
  • containsValue(value):指定した値が存在するか確認する
  • size():登録されている要素数を返す
  • isEmpty():マップが空かどうか確認する

4. 繰り返し処理とfor文での活用

4. 繰り返し処理とfor文での活用
4. 繰り返し処理とfor文での活用

HashMapに保存したデータは、拡張for文を使ってまとめて処理できます。キーと値の両方を取り出すにはentrySet()を使うのが便利です。


for (HashMap.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " = " + entry.getValue());
}

Taro = 20
Hanako = 22
Jiro = 18

このようにループ処理を使うと、マップに格納されている全ての要素を確認できます。

5. HashMapと順序の関係

5. HashMapと順序の関係
5. HashMapと順序の関係

HashMapは基本的に順序を保証しません。つまり、登録した順番と取り出す順番が一致しないことがあります。順序を管理したい場合はLinkedHashMapを使うと、追加した順番を維持できます。また、キーを自然順序でソートしたいならTreeMapを利用すると良いでしょう。

6. nullキーやnull値の扱い

6. nullキーやnull値の扱い
6. nullキーやnull値の扱い

HashMapnullキーを1つだけ許容します。また、値としてnullを複数登録することも可能です。これにより、空の値を区別したい場合にも柔軟に対応できます。ただしnullを多用するとバグの原因になるので注意が必要です。

7. HashMapの実用例

7. HashMapの実用例
7. HashMapの実用例

例えば会員のIDと名前を管理する、商品コードと価格を対応付ける、設定ファイルのキーと値を保存するなど、あらゆる場面で役立ちます。プログラミング初心者が効率的にデータを扱う練習にも最適です。


HashMap<Integer, String> users = new HashMap<>();
users.put(1, "Tanaka");
users.put(2, "Sato");
users.put(3, "Suzuki");

System.out.println(users.get(2));

Sato

8. パフォーマンスと内部仕組み

8. パフォーマンスと内部仕組み
8. パフォーマンスと内部仕組み

HashMapは内部的にハッシュテーブルを使っており、キーをハッシュ値に変換して高速に検索できる仕組みです。通常の検索や追加は平均して定数時間で実行されるため、大量のデータを扱うアプリケーションでも優れた性能を発揮します。

9. HashMapを使う際の注意点

9. HashMapを使う際の注意点
9. HashMapを使う際の注意点

HashMapはスレッドセーフではないため、複数のスレッドから同時にアクセスする場合はCollections.synchronizedMap()ConcurrentHashMapを利用するのが適切です。また、キーの重複は許されず、後から同じキーを登録すると値が上書きされるので注意しましょう。

まとめ

まとめ
まとめ

ここまでJavaのjava.utilパッケージに含まれるHashMapクラスについて学んできました。初心者でも理解しやすいように、基本的な使い方から、主なメソッド、繰り返し処理の活用方法、順序に関する特徴、そしてnullの扱いやスレッドセーフに関する注意点まで丁寧に整理しました。HashMapは連想配列のようにデータを扱えるため、名前と年齢、商品コードと価格、会員IDと会員名などを効率的に管理するのに非常に役立ちます。特にデータ検索が高速である点は大規模なシステムやWebアプリケーションでも重要な要素です。

さらに、HashMapは順序を保証しないため、必要に応じてLinkedHashMapTreeMapと使い分けることができます。nullキーやnull値を扱える柔軟性がある一方で、過度な利用はバグの原因となるため注意が必要です。また、マルチスレッド環境での使用にはConcurrentHashMapなどを選ぶことが推奨されます。これらを理解することで、Javaのコレクションフレームワークをより実践的に使いこなせるようになります。

最後に簡単なサンプルを改めて振り返りましょう。以下のプログラムでは商品名と在庫数をHashMapで管理し、データを取り出したり削除したりする基本操作を確認できます。


import java.util.HashMap;

public class HashMapSummary {
    public static void main(String[] args) {
        HashMap<String, Integer> stock = new HashMap<>();

        stock.put("Apple", 50);
        stock.put("Banana", 30);
        stock.put("Orange", 20);

        System.out.println("在庫数: " + stock.get("Banana"));

        stock.remove("Orange");

        for (HashMap.Entry<String, Integer> entry : stock.entrySet()) {
            System.out.println(entry.getKey() + " - " + entry.getValue());
        }
    }
}

在庫数: 30
Apple - 50
Banana - 30

このように、HashMapを理解すると日常的なデータ管理やシステム開発に役立つ場面が増えていきます。Java学習を進める中で、HashMapの特徴や制約を踏まえて活用することが重要です。

先生と生徒の振り返り会話

生徒

「今日の学習で、HashMapがキーと値をセットで保存できる便利なクラスだと分かりました。特に検索が速いのが印象的でした。」

先生

「そうですね。大量のデータを扱うときにHashMapの性能はとても大切です。ただし順序は保証されないので、順序が必要な場合は別のクラスを使い分けましょう。」

生徒

「nullキーやnull値を登録できることも学びましたが、注意して使うべきなんですね。」

先生

「その通りです。プログラムのバグを避けるために、どのようにデータを扱うかを意識することが大事です。そしてマルチスレッドの環境ではConcurrentHashMapなどを選ぶと安全ですよ。」

生徒

「なるほど、実際のアプリケーション開発でも役立ちそうです。これからはHashMapを積極的に使って練習してみます!」

先生

「いいですね。ぜひたくさんのサンプルを作って、理解を深めてください。HashMapをマスターするとJavaのコレクション操作がぐっと楽しくなりますよ。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

HashMapとは何ですか?

HashMapは、Javaのコレクションフレームワークに含まれるクラスで、キーと値のペアを管理するデータ構造です。キーを使って値を素早く検索できるため、ユーザー情報や商品データなどの管理に便利です。

HashMapにデータを追加する方法は?

HashMapにデータを追加するには、put(K key, V value)メソッドを使用します。例えば、map.put("Apple", 100);のように記述すると、キー「Apple」に値「100」が格納されます。

HashMapから値を取得するにはどうすれば良いですか?

HashMapから値を取得するには、get(Object key)メソッドを使用します。例えば、map.get("Apple");とすると、キー「Apple」に対応する値が取得できます。

HashMapの主なメソッドにはどのようなものがありますか?

HashMapには、put(データの追加)、get(値の取得)、remove(データの削除)、containsKey(キーの存在確認)、containsValue(値の存在確認)、size(格納されているデータ数の取得)などのメソッドがあります。

HashMapでnullをキーや値に設定することは可能ですか?

可能です。HashMapでは1つのnullキーと複数のnull値を許容します。ただし、設計上の意味を考慮して使用することが重要です。

HashMapのデータは順序を保持しますか?

いいえ、HashMapはデータの順序を保持しません。順序が必要な場合は、LinkedHashMapを使用すると良いでしょう。

HashMapとLinkedHashMapの違いは何ですか?

HashMapは順序を保持しませんが、LinkedHashMapはデータの挿入順序を保持します。順序が必要な場合や表示順が重要な場合は、LinkedHashMapを選択すると便利です。

HashMapのサイズを取得する方法は?

HashMapのサイズを取得するには、size()メソッドを使用します。例えば、map.size()とすると、現在のキーと値のペアの数が取得できます。

HashMapで特定のキーが存在するか確認する方法は?

特定のキーが存在するか確認するには、containsKey(Object key)メソッドを使用します。例えば、map.containsKey("Apple")と記述すると、キー「Apple」の有無を確認できます。

HashMapを使う際の注意点は何ですか?

HashMapを使用する際は、順序が保証されないこと、nullキーやnull値を許容することを理解しておく必要があります。また、複数スレッドでの使用にはConcurrentHashMapを検討してください。
カテゴリの一覧へ
新着記事
Springの@Transactional徹底解説!トランザクションの伝播・分離レベル・タイムアウトの基本
JavaのHashMapクラスgetメソッドの使い方を完全ガイド!初心者でもわかるjava.util入門
Thymeleafのth:fragmentを使ったテンプレートの再利用方法を完全ガイド!初心者でもわかる使い方
Javaの@PathVariableアノテーションの使い方を徹底解説!初心者でもわかるパスパラメータの基本と応用
人気記事
No.1
Java&Spring記事人気No1
Javaのラムダ式で配列を扱う!Arrays.streamの基本と注意点を初心者向けに解説
No.2
Java&Spring記事人気No2
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.3
Java&Spring記事人気No3
JavaのRuntimeExceptionを完全解説!初心者でもわかるjava.langパッケージの基礎
No.4
Java&Spring記事人気No4
JavaのIntegerクラスの使い方を完全ガイド!初心者でもわかる整数操作
No.5
Java&Spring記事人気No5
JavaのBigDecimalクラスcompareToメソッド完全ガイド!初心者でもわかる大小比較の基本
No.6
Java&Spring記事人気No6
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.7
Java&Spring記事人気No7
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本
No.8
Java&Spring記事人気No8
Javaの@SuppressWarningsアノテーションの使い方を完全ガイド!初心者でもわかる警告の抑制方法