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 | キーでソート |
- 順番が必要なら
LinkedHashMap - 並び替えたいなら
TreeMap
用途で選ぶのがポイントです
Mapを使うときの注意点
- キーは重複できません
- 値は重複しても問題ありません
- キーの比較には
equalsが使われます getの結果がnullになるケースを考慮します
Mapはキー設計がとても重要になります
まとめ
Mapは「キーと値」の対応関係を扱うためのコレクションです
ListやSetでは表現しづらいデータ構造を、わかりやすく管理できます
キーをどう設計するかを意識することで、Mapは非常に強力な道具になります