月ノ書

JavaのMapの使い方を理解する | キーと値で管理する仕組み

この記事でわかること
  • よく使われるMapの種類と特徴を知ることができます
  • JavaのMapがどんなデータ構造なのか理解できます
  • ListやSetとの違いがはっきりわかります
  • Mapの基本的な使い方を学べます
  • データの追加・取得・削除の方法がわかります

Mapとは何か

Mapは「キー」と「値」をセットで管理するコレクションです
これまでのListやSetとは違い、インデックスではなくキーで値を管理します

たとえば、ユーザーIDとユーザー名を対応づけたい場合

キー
user01優花
user02花音

このように「何に対して、何の情報か」を明確に管理できます

List・Set・Mapの違い

ここで一度、これまでのコレクションとの違いを整理します

種類管理方法重複主な用途
List順番可能並び順が重要
Set値のみ不可重複を防ぐ
Mapキーと値キーは不可対応関係を管理

Mapは「対応表」を扱うための仕組みだと考えると理解しやすいです

Mapを使う準備

Mapもインターフェースなので、実装クラスを使います
もっとも一般的なのは HashMap です

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

Map<String, String> users = new HashMap<>()

<String, String>

を表しています

要素を追加する

要素の追加には put を使います

users.put("user01", "太郎")
users.put("user02", "花子")
キー
user01太郎
user02花子

同じキーで put すると、値は上書きされます

値を取得する

値の取得は get を使います

String name = users.get("user01")
System.out.println(name)

存在しないキーを指定すると null が返る点に注意が必要です

キーや値の存在確認

Mapには存在確認用のメソッドがあります

users.containsKey("user01")
users.containsValue("太郎")
メソッド確認内容
containsKeyキーの存在
containsValue値の存在

基本的にはキーでの確認を使うことが多いです

要素を削除する

削除は remove を使います

users.remove("user02")

キーを指定して削除するのがMapの特徴です

要素数を取得する

要素数は size で取得できます

System.out.println(users.size())

ListやSetと同じなので覚えやすいです

Mapをループで扱う

Mapは少し特殊で、直接拡張for文では回せません
代表的な方法は3つあります

キーを使って回す方法

for (String key : users.keySet()) {
    System.out.println(key + ":" + users.get(key))
}

値だけを取り出す方法

for (String value : users.values()) {
    System.out.println(value)
}

キーと値を同時に扱う方法

for (Map.Entry<String, String> entry : users.entrySet()) {
    System.out.println(entry.getKey() + ":" + entry.getValue())
}
方法特徴
keySetキー中心の処理
values値だけ使いたい
entrySet両方使いたい

よく使われるMapの種類

Mapにもいくつか種類があります

種類特徴
HashMap高速で一般的
LinkedHashMap追加順を保持
TreeMapキーでソート

用途で選ぶのがポイントです

Mapを使うときの注意点

Mapはキー設計がとても重要になります

まとめ

Mapは「キーと値」の対応関係を扱うためのコレクションです
ListやSetでは表現しづらいデータ構造を、わかりやすく管理できます
キーをどう設計するかを意識することで、Mapは非常に強力な道具になります

学習進捗