はじめに
この実験では、Java の Map 内に特定のキーが存在するかどうかを効果的にチェックする方法を学びます。これは、エラーを防ぎ、強力なマップ操作を保証するための重要なスキルです。
キーの存在をチェックする基本的な containsKey() メソッドを探索し、さまざまなキーの型での使用方法を示し、null キーの扱い方についても説明します。これにより、Java のマップにおけるキーのチェックについて包括的な理解を得ることができます。
containsKey() を使用したキーの確認
このステップでは、containsKey() メソッドを使用して HashMap 内に特定のキーが存在するかどうかをチェックする方法を学びます。これは、マップを操作する際の基本的な操作であり、存在しないキーにアクセスしようとした場合に発生するエラーを回避することができます。
HashMap は、Java のデータ構造で、キーと値のペアを格納します。辞書のように考えると、各単語(キー)には定義(値)があります。containsKey() メソッドは、辞書に「この特定の単語のエントリはありますか?」と尋ねるようなものです。
containsKey() の使用方法を示すために、簡単な Java プログラムを作成しましょう。
WebIDE エディタで
HelloJava.javaファイルを開きます。前の実験を完了している場合、このファイルは~/projectディレクトリに既に存在するはずです。HelloJava.javaの既存のコードを次のコードに置き換えます。import java.util.HashMap; public class HelloJava { public static void main(String[] args) { // Create a HashMap HashMap<String, String> userMap = new HashMap<>(); // Add some key-value pairs userMap.put("alice", "Alice Smith"); userMap.put("bob", "Bob Johnson"); userMap.put("charlie", "Charlie Brown"); // Check if a key exists using containsKey() String keyToCheck1 = "alice"; String keyToCheck2 = "david"; System.out.println("Checking for key: " + keyToCheck1); if (userMap.containsKey(keyToCheck1)) { System.out.println("Key '" + keyToCheck1 + "' exists in the map."); } else { System.out.println("Key '" + keyToCheck1 + "' does not exist in the map."); } System.out.println("\nChecking for key: " + keyToCheck2); if (userMap.containsKey(keyToCheck2)) { System.out.println("Key '" + keyToCheck2 + "' exists in the map."); } else { System.out.println("Key '" + keyToCheck2 + "' does not exist in the map."); } } }このコードの新しい部分を見てみましょう。
import java.util.HashMap;: この行は、HashMapクラスをインポートします。これは、HashMapを使用するために必要です。HashMap<String, String> userMap = new HashMap<>();: この行は、キーと値がどちらもString型の新しいHashMapを作成します。userMap.put("alice", "Alice Smith");: これは、マップにキーと値のペアを追加します。キーは"alice"で、値は"Alice Smith"です。userMap.containsKey(keyToCheck1): これがこのステップの核心です。containsKey()メソッドは、キーを引数として受け取り、マップ内にキーが見つかった場合はtrueを返し、そうでない場合はfalseを返します。
HelloJava.javaファイルを保存します(Ctrl+S または Cmd+S)。次に、ターミナルで
javacコマンドを使用してプログラムをコンパイルします。javac HelloJava.javaエラーがなければ、何も出力されません。
最後に、
javaコマンドを使用してコンパイルされたプログラムを実行します。java HelloJava次のような出力が表示されるはずです。
Checking for key: alice Key 'alice' exists in the map. Checking for key: david Key 'david' does not exist in the map.
この出力は、containsKey() が "alice" と "david" のキーが userMap 内に存在するかどうかを正しく識別したことを確認しています。
異なるキータイプでテストする
前のステップでは、HashMap で String 型のキーを使用しました。しかし、HashMap は様々なデータ型をキーとして使用することができます。ただし、それらはオブジェクトである必要があります(int、char などのプリミティブ型は、自動的に Integer、Character などの対応するオブジェクトラッパーに「ボクシング」されます)。
このステップでは、HashMap で異なるデータ型をキーとして使用する方法を探索し、containsKey() がそれらとどのように動作するかを見ていきます。
WebIDE エディタで
HelloJava.javaファイルを開きます。既存のコードを次のコードに置き換えます。
import java.util.HashMap; public class HelloJava { public static void main(String[] args) { // Create a HashMap with Integer keys and String values HashMap<Integer, String> studentMap = new HashMap<>(); // Add some key-value pairs studentMap.put(101, "Alice Smith"); studentMap.put(102, "Bob Johnson"); studentMap.put(103, "Charlie Brown"); // Check for keys using containsKey() with Integer keys Integer keyToCheck1 = 101; Integer keyToCheck2 = 200; // A key that does not exist System.out.println("Checking for key: " + keyToCheck1); if (studentMap.containsKey(keyToCheck1)) { System.out.println("Key '" + keyToCheck1 + "' exists in the map."); } else { System.out.println("Key '" + keyToCheck1 + "' does not exist in the map."); } System.out.println("\nChecking for key: " + keyToCheck2); if (studentMap.containsKey(keyToCheck2)) { System.out.println("Key '" + keyToCheck2 + "' exists in the map."); } else { System.out.println("Key '" + keyToCheck2 + "' does not exist in the map."); } // You can also use primitive int directly, Java will auto-box it int primitiveKey = 102; System.out.println("\nChecking for primitive key: " + primitiveKey); if (studentMap.containsKey(primitiveKey)) { System.out.println("Key '" + primitiveKey + "' exists in the map."); } else { System.out.println("Key '" + primitiveKey + "' does not exist in the map."); } } }このコードでは、キーが
Integerオブジェクト(学生の ID を表す)で、値がStringオブジェクト(学生の名前を表す)のHashMapを作成しています。そして、Integerオブジェクトとプリミティブ型のintの両方でcontainsKey()を使用して、Java が変換(自動ボクシング)を処理してくれることを示しています。HelloJava.javaファイルを保存します。プログラムをコンパイルします。
javac HelloJava.javaプログラムを実行します。
java HelloJava次のような出力が表示されるはずです。
Checking for key: 101 Key '101' exists in the map. Checking for key: 200 Key '200' does not exist in the map. Checking for primitive key: 102 Key '102' exists in the map.
これは、containsKey() が Integer 型のキーで正しく動作すること、および Java の自動ボクシング機能により、HashMap<Integer, ...> でキーをチェックする際にプリミティブ型の int 値を直接使用できることを示しています。
Null キーの扱い
Java の HashMap では、実際に null をキーとして使用することができますが、null キーは 1 つだけ許可されます。containsKey() が null キーを扱う際の動作を理解することは重要です。
このステップでは、プログラムを修正して null キーを含め、containsKey() を使用してその存在をチェックします。
WebIDE エディタで
HelloJava.javaファイルを開きます。既存のコードを次のコードに置き換えます。
import java.util.HashMap; public class HelloJava { public static void main(String[] args) { // Create a HashMap that allows null keys HashMap<String, String> statusMap = new HashMap<>(); // Add some key-value pairs, including a null key statusMap.put("active", "User is currently online"); statusMap.put("inactive", "User is offline"); statusMap.put(null, "User status is unknown"); // Adding a null key // Check for keys using containsKey(), including null String keyToCheck1 = "active"; String keyToCheck2 = "pending"; // A key that does not exist String keyToCheck3 = null; // The null key System.out.println("Checking for key: " + keyToCheck1); if (statusMap.containsKey(keyToCheck1)) { System.out.println("Key '" + keyToCheck1 + "' exists in the map."); } else { System.out.println("Key '" + keyToCheck1 + "' does not exist in the map."); } System.out.println("\nChecking for key: " + keyToCheck2); if (statusMap.containsKey(keyToCheck2)) { System.out.println("Key '" + keyToCheck2 + "' exists in the map."); } else { System.out.println("Key '" + keyToCheck2 + "' does not exist in the map."); } System.out.println("\nChecking for null key:"); if (statusMap.containsKey(keyToCheck3)) { System.out.println("Null key exists in the map."); } else { System.out.println("Null key does not exist in the map."); } } }ここでは、
String型のキーと値を持つHashMapを作成しています。そして、statusMap.put(null, "User status is unknown");を使用して明示的にnullキーを追加しています。最後に、containsKey(null)を使用してnullキーが存在するかどうかをチェックしています。HelloJava.javaファイルを保存します。プログラムをコンパイルします。
javac HelloJava.javaプログラムを実行します。
java HelloJava次のような出力が表示されるはずです。
Checking for key: active Key 'active' exists in the map. Checking for key: pending Key 'pending' does not exist in the map. Checking for null key: Null key exists in the map.
この出力は、containsKey() が HashMap 内の null キーの存在を正しく識別することを確認しています。null キーを使用することは可能ですが、コードを明確にし、プログラムの他の部分で潜在的な NullPointerException の問題を防ぐために、可能な限り避けることが推奨されます。
まとめ
この実験では、Java の HashMap で containsKey() メソッドを使用して特定のキーが存在するかどうかをチェックする方法を学びました。この基本的な操作は、マップの要素にアクセスする際のエラーを防ぐために重要です。文字列キーで containsKey() を使用する練習を行い、既存のキーと存在しないキーを正しく識別する様子を確認しました。



