【Java】レッスン4-3:HashMapを理解しよう

一つ前のページではHashSetとTreeSeについて学習しました。
今回は HashMap について見ていきましょう。
Lesson1:基礎文法編
Lesson2:制御構造編
Lesson3:メソッド編
Lesson4:コレクション編
・Lesson4-1:ArrayListを理解しよう
・Lesson4-2:HashSetとTreeSetを理解しよう
・Lesson4-3:HashMapを理解しよう ◁今回はココ
・Lesson4-4:TreeMapを理解しよう
・確認問題4-☆1:ナインゲームを作ろう
・確認問題4-☆2:アラビア数字をローマ数字に変換するアプリを作ろう
Lesson5:クラス編
HashMapとは?初心者にもわかる特徴・使い方・コード例
Javaでデータを「キー」と「値」の組み合わせで管理したいときに活躍するのがHashMapです。
配列やリストと異なり、キーを指定して素早く値を取得・更新できるため、大量のデータ管理や検索に非常に効率的です。
本記事では、HashMapの基本的な使い方から、put・getなど主要メソッドの解説、特徴や活用例までを初心者向けにわかりやすく説明します。
これを学べば、複雑なデータ構造をシンプルに扱えるようになり、実用的なプログラムの幅が大きく広がるでしょう。
それでは、効率的なデータ管理の第一歩を踏み出しましょう。

HashMapとは何か?|特徴と基本構造・仕組みを解説
HashMap はJAVAのコレクションフレームワークに属するクラスの一つで、キーと値のペアを格納するためのデータ構造です。
キーを使って値にアクセスできるため、非常に効率的にデータの管理や取得が行えます。
例えばキーが「学生のID」、値が「学生の名前」といった形で、IDをキーにして名前を効率的に管理することができます。
- キーと値のペアで管理: データは
キーと値のペアとして保存されます。キーを使って値にアクセスすることができるため、簡単にデータを検索できます。 - 重複したキーは存在できない: 同じキーで異なる値を格納しようとすると、後から追加された値が上書きされます。
- 順序は保証されない: 格納したデータの順序は保証されません。データがどの順序で取り出されるかは不定です。
- nullを格納できる: HashMapはキーにも値にも
nullを使用できますが、キーのnullは一つだけです。
HashMapを使用するには、そのたのコレクションと同様にインポートした上でインスタンス化する必要があります。
import java.util.HashMap; // HashMapを使用するためのインポート文 HashMap<キーの型, 値の型> 変数 = new HashMap<>(); // HashMapクラスのインスタンスを作成
HashMapのコード例と主要メソッド一覧|使い方をまとめて解説
HashMapを使うにはまずインスタンスを作成し、put()メソッド でキーと値を追加します。
データを取得する際は get()メソッド を使います。以下に基本的な使い方の例を示します。
import java.util.HashMap; // HashMapを使用するためのインポート文
public class Main {
public static void main(String[] args) {
// String型のキーとString型の値をもつstudentsというHashMapを作成
HashMap<String, String> students = new HashMap<>();
// 値を追加 (キー:学生のID, 値:学生の名前)
students.put("101", "田中");
students.put("102", "佐藤");
students.put("103", "鈴木");
// getメソッドを使って値を取得
String name = students.get("101");
System.out.println("ID 101の学生の名前は: " + name);
// putメソッドを使って重複したキーの追加
students.put("101", "山田"); // 田中のデータが山田に上書きされる
System.out.println("ID 101の学生の新しい名前は: " + students.get("101"));
// キーが存在するか確認
if (students.containsKey("104")) {
System.out.println("ID 104の学生が存在します。");
} else {
System.out.println("ID 104の学生は存在しません。");
}
}
}また、HashMapの中で良く使用されるメソッドを一覧で紹介します。
put(key, value): 指定したキーと値のペアをHashMapに追加します。すでに同じキーが存在する場合、そのキーに対応する値は上書きされます。get(key): 指定したキーに対応する値を取得します。キーが存在しない場合はnullが返されます。remove(key): 指定したキーに対応するエントリを削除します。containsKey(key): 指定したキーが存在するかどうかを確認します。存在する場合はtrueを返します。size(): HashMapに格納されているエントリの数を取得します。
まとめ|効率的なキー・値管理の基礎
今回の学習では、HashMapの特徴や基本構造、そしてput・getなどの主要メソッドを使ったコード例について学びました。
これにより、データをキーと値の組み合わせで効率的に管理し、素早く検索・更新できるプログラムを書けるようになります。
HashMapはあらゆる規模の開発で利用される重要なコレクションです。
ここで身につけた知識を活かし、さらに多様なデータ構造や活用方法に挑戦していきましょう。
練習問題|ArrayListとHashMapの違いを理解しよう

Javaのコレクションフレームワークを理解するために、ArrayListとHashMapを使って生徒の名前と点数を管理するプログラムを作成しましょう。
このプログラムではあらかじめ用意された3人の生徒の名前に対して、ユーザーが点数を入力し、それらを表示します。
この問題の要件
以下の要件に従ってコードを完成させてください。
- 生徒の名前を格納するArrayListを作成すること。
- 各生徒の名前に対応する点数を格納するHashMapを作成すること。
- ユーザーから3人の生徒の点数を入力してもらうこと。
- 入力された点数をHashMapに格納すること。
- 全生徒の名前と点数を表示すること。
ただし、以下のような実行結果となること。
田中の点数を入力してください: 85 鈴木の点数を入力してください: 92 佐藤の点数を入力してください: 78 田中の点数は85点です。 鈴木の点数は92点です。 佐藤の点数は78点です。
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
- ヒント1【コードの構成を見る】
-
正解のコードは上から順に以下のような構成となっています。
1:ArrayListクラスをインポート
2:HashMapクラスをインポート
3:Scannerクラスをインポート
4:StudentScoresクラスの定義
□ mainメソッドの定義
□ □ ArrayListオブジェクトstudentNamesの初期化
□ □ studentNamesに”田中”を追加
□ □ studentNamesに”鈴木”を追加
□ □ studentNamesに”佐藤”を追加
□ □ HashMapオブジェクトstudentScoresの初期化
□ □ Scannerオブジェクトscannerの初期化
□ □ for-eachループでstudentNames内の各名前に対して処理を実行
□ □ □ ”の点数を入力してください: “と出力
□ □ □ ユーザーの入力を整数として読み取り、変数scoreに代入
□ □ □ studentScoresにnameをキー、scoreを値として格納
□ □ printStudentScoresメソッドを呼び出し
□ printStudentScoresメソッドの定義
□ □ for-eachループでnames内の各名前に対して処理を実行
□ □ □ scoresからnameに対応する点数を取得し、変数scoreに代入
□ □ □ ”nameの点数はscore点です。”と出力
- ヒント2【穴埋め問題にする】
-
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
import java.util.ArrayList; import java.util.HashMap; import java.util.Scanner; public class StudentScores { // メインメソッド public static void main(String[] args) { // 生徒の名前を格納するArrayListを作成 /* 【穴埋め問題1】 ここにArrayListの宣言と初期化をするコードを書いてください。 */ /* 【穴埋め問題2】 ここでstudentNamesに生徒の名前「田中」「鈴木」「佐藤」を追加してください。 */ // 生徒の名前と点数を格納するHashMapを作成 /* 【穴埋め問題3】 ここにHashMapの宣言と初期化をするコードを書いてください。 */ // スキャナを作成してユーザー入力を受け取る Scanner scanner = new Scanner(System.in); // 生徒ごとに点数を入力してもらう for (String name : studentNames) { System.out.println(name + "の点数を入力してください: "); int score = scanner.nextInt(); /* 【穴埋め問題4】 ここでHashMapのstudentScoresに名前と点数を登録するコードを書いてください。 */ } // 全生徒の点数を表示するメソッドを呼び出し printStudentScores(studentNames, studentScores); } // 全生徒の点数を表示するメソッド public static void printStudentScores(ArrayList<String> names, HashMap<String, Integer> scores) { // ArrayListから名前を一つずつ取り出す for (String name : names) { // HashMapから対応する点数を取得 Integer score = scores.get(name); // 名前と点数を表示 System.out.println(name + "の点数は" + score + "点です。"); } } }
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
練習問題の解答と解説
この問題の正解コードとその解説は以下の通りです。
クリックして開いて確認してください。
- 正解コード
-
import java.util.ArrayList; import java.util.HashMap; import java.util.Scanner; public class StudentScores { // メインメソッド public static void main(String[] args) { // 生徒の名前を格納するArrayListを作成 ArrayList<String> studentNames = new ArrayList<>(); studentNames.add("田中"); studentNames.add("鈴木"); studentNames.add("佐藤"); // 生徒の名前と点数を格納するHashMapを作成 HashMap<String, Integer> studentScores = new HashMap<>(); // スキャナを作成してユーザー入力を受け取る Scanner scanner = new Scanner(System.in); // 生徒ごとに点数を入力してもらう for (String name : studentNames) { System.out.println(name + "の点数を入力してください: "); int score = scanner.nextInt(); studentScores.put(name, score); } // 全生徒の点数を表示するメソッドを呼び出し printStudentScores(studentNames, studentScores); } // 全生徒の点数を表示するメソッド public static void printStudentScores(ArrayList<String> names, HashMap<String, Integer> scores) { // ArrayListから名前を一つずつ取り出す for (String name : names) { // HashMapから対応する点数を取得 Integer score = scores.get(name); // 名前と点数を表示 System.out.println(name + "の点数は" + score + "点です。"); } } }
- 正解コードの解説
-
コードをブロックごとに分割して解説します。
必要なクラスのインポート
import java.util.ArrayList; import java.util.HashMap; import java.util.Scanner;
ArrayListは、複数の要素(ここでは生徒の名前)を格納するために使用します。HashMapはキーと値のペアを格納するためのクラスで、ここではキーに生徒の名前、値にその点数を対応させています。Scannerは、コンソールからユーザーの入力を受け取るために使います。メインメソッドの宣言と生徒の名前の管理
public static void main(String[] args) { ArrayList<String> studentNames = new ArrayList<>(); studentNames.add("田中"); studentNames.add("鈴木"); studentNames.add("佐藤");public static void main(String[] args)はJavaプログラムのエントリーポイントです。プログラムが開始されると、このメソッドが最初に実行されます。ArrayList<String> studentNames = new ArrayList<>();は、生徒の名前を格納するためのリストを作成しています。addメソッドを使って、生徒の名前をリストに追加しています。生徒の名前と点数の管理
HashMap<String, Integer> studentScores = new HashMap<>();
ここで
HashMapを使って生徒の名前(キー)とその点数(値)を管理しています。このプログラムではキーとして生徒の名前、値として点数(
Integer型)を格納しています。点数の入力
Scanner scanner = new Scanner(System.in); for (String name : studentNames) { System.out.println(name + "の点数を入力してください: "); int score = scanner.nextInt(); studentScores.put(name, score); }Scanner scanner = new Scanner(System.in);で、ユーザーからコンソールでの入力を受け取るための準備をします。for (String name : studentNames)でstudentNamesリストに格納されている名前を順番に取り出し、その名前に対応する点数を入力させます。scanner.nextInt()で入力された整数(点数)を読み取り、その名前と点数をHashMapに追加します。生徒の点数を表示するメソッド
printStudentScores(studentNames, studentScores);
ここで生徒の名前と点数を表示するために
printStudentScoresメソッドを呼び出しています。このメソッドに生徒の名前と点数を引数として渡しています。
点数を表示するメソッドの詳細
public static void printStudentScores(ArrayList<String> names, HashMap<String, Integer> scores) { for (String name : names) { Integer score = scores.get(name); System.out.println(name + "の点数は" + score + "点です。"); } }このメソッドでは
ArrayListから生徒の名前を1つずつ取り出し、HashMapを使ってその名前に対応する点数を取得します。そして
System.out.println()で名前と点数をコンソールに表示します。


