Java でマップに特定のキーが含まれているかどうかを確認する方法

JavaJavaBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Java の Map 内に特定のキーが存在するかどうかを効果的にチェックする方法を学びます。これは、エラーを防ぎ、強力なマップ操作を保証するための重要なスキルです。

キーの存在をチェックする基本的な containsKey() メソッドを探索し、さまざまなキーの型での使用方法を示し、null キーの扱い方についても説明します。これにより、Java のマップにおけるキーのチェックについて包括的な理解を得ることができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/StringManipulationGroup(["String Manipulation"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java/BasicSyntaxGroup -.-> java/data_types("Data Types") java/StringManipulationGroup -.-> java/strings("Strings") java/DataStructuresGroup -.-> java/collections_methods("Collections Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/wrapper_classes("Wrapper Classes") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/hashmap("HashMap") java/SystemandDataProcessingGroup -.-> java/object_methods("Object Methods") subgraph Lab Skills java/data_types -.-> lab-559951{{"Java でマップに特定のキーが含まれているかどうかを確認する方法"}} java/strings -.-> lab-559951{{"Java でマップに特定のキーが含まれているかどうかを確認する方法"}} java/collections_methods -.-> lab-559951{{"Java でマップに特定のキーが含まれているかどうかを確認する方法"}} java/wrapper_classes -.-> lab-559951{{"Java でマップに特定のキーが含まれているかどうかを確認する方法"}} java/hashmap -.-> lab-559951{{"Java でマップに特定のキーが含まれているかどうかを確認する方法"}} java/object_methods -.-> lab-559951{{"Java でマップに特定のキーが含まれているかどうかを確認する方法"}} end

containsKey() を使用したキーのチェック

このステップでは、containsKey() メソッドを使用して HashMap 内に特定のキーが存在するかどうかをチェックする方法を学びます。これは、マップを操作する際の基本的な操作であり、存在しないキーにアクセスしようとした場合に発生するエラーを回避することができます。

HashMap は、Java のデータ構造で、キーと値のペアを格納します。辞書のように考えると、各単語(キー)には定義(値)があります。containsKey() メソッドは、辞書に「この特定の単語のエントリはありますか?」と尋ねるようなものです。

containsKey() の使用方法を示すために、簡単な Java プログラムを作成しましょう。

  1. WebIDE エディタで HelloJava.java ファイルを開きます。前の実験を完了している場合、このファイルは ~/project ディレクトリに既に存在するはずです。

  2. 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 を返します。
  3. HelloJava.java ファイルを保存します(Ctrl+S または Cmd+S)。

  4. 次に、ターミナルで javac コマンドを使用してプログラムをコンパイルします。

    javac HelloJava.java

    エラーがなければ、何も出力されません。

  5. 最後に、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 内に存在するかどうかを正しく識別したことを確認しています。

異なるキーの型でテスト

前のステップでは、HashMapString 型のキーを使用しました。しかし、HashMap は様々なデータ型をキーとして使用することができます。ただし、それらはオブジェクトである必要があります(intchar などのプリミティブ型は、自動的に IntegerCharacter などの対応するオブジェクトラッパーに「ボクシング」されます)。

このステップでは、HashMap で異なるデータ型をキーとして使用する方法を探索し、containsKey() がそれらとどのように動作するかを見ていきます。

  1. WebIDE エディタで HelloJava.java ファイルを開きます。

  2. 既存のコードを次のコードに置き換えます。

    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 が変換(自動ボクシング)を処理してくれることを示しています。

  3. HelloJava.java ファイルを保存します。

  4. プログラムをコンパイルします。

    javac HelloJava.java
  5. プログラムを実行します。

    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() を使用してその存在をチェックします。

  1. WebIDE エディタで HelloJava.java ファイルを開きます。

  2. 既存のコードを次のコードに置き換えます。

    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 キーが存在するかどうかをチェックしています。

  3. HelloJava.java ファイルを保存します。

  4. プログラムをコンパイルします。

    javac HelloJava.java
  5. プログラムを実行します。

    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 の HashMapcontainsKey() メソッドを使用して特定のキーが存在するかどうかをチェックする方法を学びました。この基本的な操作は、マップの要素にアクセスする際のエラーを防ぐために重要です。文字列キーで containsKey() を使用する練習を行い、既存のキーと存在しないキーを正しく識別する様子を確認しました。