JavaのHashMap完全ガイド:キーと値の最強コンビ!

こんにちは。ゆうせいです。

今回は、新人エンジニアの皆さんに向けてJavaの「HashMap(ハッシュマップ)」をわかりやすく解説します。

「リストやセットはわかったけど、マップってなに?」
「HashMapはいつ使うの?」
そんな疑問をスッキリ解決していきましょう!


HashMapって何?

「キー」と「値」のペアを管理するコレクション

HashMapは、Mapインターフェースを実装したキーと値(Key-Value)のセットを扱うデータ構造です。

例えるなら:

名前(キー)と電話番号(値)の「電話帳」!

Map<String, String> phoneBook = new HashMap<>();
phoneBook.put("山田", "090-1111-2222");
phoneBook.put("佐藤", "080-3333-4444");

このように、「名前から電話番号をすぐに引ける」ような使い方ができるんです!


特徴まとめ

特徴説明
キーは一意同じキーは登録できない(上書きされる)
値は重複OK同じ値が複数のキーにあってもOK
順序なし登録順は保持されない(保持したいならLinkedHashMap
nullをキーにも値にも使えるただし、nullキーは1つまで

よく使うメソッド一覧

メソッド名説明
put(K, V)値を追加または更新
get(K)キーに対応する値を取得
remove(K)指定したキーのペアを削除
containsKey(K)キーが存在するか調べる
containsValue(V)値が存在するか調べる
keySet()すべてのキーの集合を取得
values()すべての値の集合を取得
entrySet()すべてのキーと値のペアを取得
size()登録されたペアの数を取得
clear()全要素削除

基本操作の例

Map<String, Integer> scores = new HashMap<>();
scores.put("英語", 85);
scores.put("数学", 92);
scores.put("国語", 76);

System.out.println(scores.get("数学")); // 92
scores.remove("国語");

System.out.println(scores.containsKey("英語")); // true
System.out.println(scores.size()); // 2

順序に注意!

HashMapは順番を保持しません。順番が重要な場合は次のように使い分けます:

クラス名順序用途例
HashMap順序なし基本の高速マップ
LinkedHashMap追加順表示順を保ちたいとき
TreeMapキーの昇順並び替えが必要なとき


ループ処理:全データの走査

keySet()を使う方法

for (String subject : scores.keySet()) {
    System.out.println(subject + ":" + scores.get(subject));
}

entrySet()を使う方法(より効率的)

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


よくあるミスと対処法

  • get()でキーがないと nullが返る
    • containsKey()で確認してから取得するのがおすすめ!
  • 同じキーにput()すると 上書きされる
    • → 追加でなく「更新」扱いになります。

応用:文字カウントや集計にも使える!

文字の出現回数を数える例

String[] words = {"apple", "banana", "apple", "orange", "banana"};

Map<String, Integer> countMap = new HashMap<>();
for (String word : words) {
    countMap.put(word, countMap.getOrDefault(word, 0) + 1);
}

System.out.println(countMap); // {orange=1, banana=2, apple=2}


メリットとデメリット

メリットデメリット
検索が高速順序なしで扱いづらいことも
キーによる直接アクセスキーがnullのとき注意
柔軟な構造equalsとhashCodeの理解が必要な場合あり

今後の学習のステップ

  • LinkedHashMapTreeMap順序をコントロール
  • Map<String, List<String>>などのネスト構造に挑戦!
  • ConcurrentHashMapスレッドセーフな処理も覚えておこう!




セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。