setに関するmethod
Javaの Map は、**「キー(Key)」と「値(Value)」をペア**にして保存する非常に強力なコレクションです。
主要なメソッドを「登録・取得」「調査」「一括処理」「Java 8以降の関数型操作」の4つのカテゴリーに分けて紹介します。
1. 基本操作(登録・取得・削除)¶
もっとも頻繁に使う、辞書のようにデータを出し入れする操作です。
Java
import java.util.HashMap;
import java.util.Map;
Map<String, Integer> map = new HashMap<>();
// put: データの登録
map.put("Apple", 100);
map.put("Banana", 200);
// get: データの取得
Integer price = map.get("Apple"); // 100
// getOrDefault: キーがない場合のデフォルト値を指定して取得
Integer cherryPrice = map.getOrDefault("Cherry", 0); // 0 (エラーにならない)
// remove: 削除
map.remove("Banana");
// putIfAbsent: キーが存在しない場合のみ登録
map.putIfAbsent("Apple", 150); // Appleは既にあるので何もしない
2. 調査・情報の取得¶
Mapの状態を確認するためのメソッドです。
Java
// size: ペアの数
int size = map.size();
// containsKey / containsValue: 存在確認
boolean hasApple = map.containsKey("Apple"); // true
boolean has100 = map.containsValue(100); // true
// keySet: キーの一覧を取得
// values: 値の一覧を取得
System.out.println(map.keySet()); // [Apple]
System.out.println(map.values()); // [100]
// entrySet: キーと値のセット(Entry)の一覧を取得
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + "は" + entry.getValue() + "円");
}
3. Java 8以降の関数的な操作¶
複雑な処理を1行で書ける、モダンで非常に便利なメソッド群です。
Java
// forEach: 全要素の繰り返し処理
map.forEach((key, value) -> System.out.println(key + ":" + value));
// replaceAll: 全要素を一括置換(例:全品10%引きにする)
map.replaceAll((key, value) -> (int)(value * 0.9));
// compute: 指定したキーの値を計算して更新
map.compute("Apple", (key, value) -> value + 50); // 50円値上げ
// merge: 既存の値と新しい値を合体させる(集計に超便利!)
// すでに値があれば足し算、なければその値を登録
map.merge("Apple", 10, (oldVal, newVal) -> oldVal + newVal);
4. まとめ表¶
| メソッド | 役割 | 戻り値 |
|---|---|---|
put(k, v) |
キーと値を登録(既存なら上書き) | 古い値 |
get(k) |
キーに対応する値を取得 | 値(なければnull) |
getOrDefault(k, d) |
キーがなければデフォルト値を返す | 値 |
containsKey(k) |
指定したキーがあるか確認 | boolean |
keySet() |
キーだけの「Set」を返す | Set |
entrySet() |
キーと値のペア「Entry」の集合を返す | Set |
merge(k, v, func) |
値があれば計算し、なければ登録 | 新しい値 |
実践:どっちを使うべき?¶
- ただのリストのように扱いたい →
List - 重複を消したいだけ →
Set - 「ID」や「名前」をフックに、一瞬でデータを探し出したい →
Map
Mapの merge や compute は、アンケートの集計や単語の出現回数を数えるときに驚くほどコードが短くなります。
「特定の条件でMapの中身をフィルタリングしたい」や「ListからMapを作成したい」といった具体的なStream APIとの連携パターンも見てみますか?