1. 導入:なぜMap操作を正しく知る必要があるのか
Java開発において、データの関連付け(キーと値のペア)を扱う「Map」は避けて通れないクラスです。しかし、ただ値を保存するだけでなく、状況に応じた適切なメソッドを選ぶことで、コードの可読性が上がり、バグの混入を防ぐことができます。「上書きしていいのか?」「すでにある場合は何もしないのか?」といったロジックをシンプルに記述するために、主要な5つのメソッドをしっかり押さえておきましょう。
2. 基礎知識:Mapとは何か
Mapは、一意の「キー(Key)」に対して「値(Value)」を関連付けて保持するデータ構造です。例えば、ユーザーIDをキーにして名前を保存する場合などがこれに当たります。Javaでは主にHashMapが使われます。今回は、Mapの内容を操作する基本的なメソッドに焦点を当てます。
3. 実装/解決策:メソッドの使い分け
用途に合わせて以下のメソッドを使い分けます。
・put(): 指定したキーに値を設定します。存在する場合は上書きします。
・putAll(): 別のMapの内容をすべて追加します。
・putIfAbsent(): キーが存在しない場合のみ追加します。初期化処理に便利です。
・remove(): キーを指定して要素を削除します。
・replace(): キーがすでに存在する場合のみ値を更新します。
4. サンプルプログラム
以下のコードをコピーして、動作を確認してみてください。
import java.util.HashMap;
import java.util.Map;
public class MapLesson {
public static void main(String[] args) {
Map
// 1. put(): 基本的な追加
userMap.put(“ID001”, “佐藤”);
userMap.put(“ID002”, “鈴木”);
// 2. putAll(): 別のMapをまとめて追加
Map
userMap.putAll(extraUsers);
// 3. putIfAbsent(): ID001は存在するため更新されない
userMap.putIfAbsent(“ID001”, “佐藤(更新)”);
// 4. replace(): キーが存在する場合のみ値を更新
userMap.replace(“ID002”, “鈴木(新)”);
// 5. remove(): キーを指定して削除
userMap.remove(“ID004”);
// 結果を出力
userMap.forEach((key, value) -> System.out.println(key + “: ” + value));
}
}
5. 応用・注意点:現場で陥りやすい罠
実務では、Null値の扱いに注意が必要です。HashMapはnullキーやnull値を許容しますが、TreeMapやConcurrentHashMapなどは許容しない場合があります。
また、スレッドセーフ(複数スレッドからの同時アクセス)が必要な場合は、通常のHashMapではなくConcurrentHashMapを使用してください。特に「確認してから追加する(if文でcontainsしてからputする)」という処理を別々に行うと、マルチスレッド環境では競合が発生します。この場合、今回紹介したputIfAbsent()のようなアトミック(不可分)なメソッドを使うことで、競合を防ぎ、安全で効率的なコードを書くことができます。
まずはこの5つのメソッドを使いこなして、Map操作の基礎体力を高めていきましょう!

コメント