Java でセットに特定の要素が含まれているかどうかを確認する方法

JavaJavaBeginner
今すぐ練習

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

はじめに

この実験では、Java のコレクション内に特定の要素が存在するかどうかを確認する方法を学びます。すべてのコレクション型で利用可能な contains() メソッドの使用に焦点を当てます。異なる要素型で contains() を使用する練習を行い、null 要素の扱い方を学びます。この実験の終了時には、Java コレクション内の要素の存在を確認することに習熟するでしょう。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java/DataStructuresGroup -.-> java/collections_methods("Collections Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/encapsulation("Encapsulation") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/arraylist("ArrayList") java/SystemandDataProcessingGroup -.-> java/object_methods("Object Methods") subgraph Lab Skills java/collections_methods -.-> lab-559973{{"Java でセットに特定の要素が含まれているかどうかを確認する方法"}} java/encapsulation -.-> lab-559973{{"Java でセットに特定の要素が含まれているかどうかを確認する方法"}} java/arraylist -.-> lab-559973{{"Java でセットに特定の要素が含まれているかどうかを確認する方法"}} java/object_methods -.-> lab-559973{{"Java でセットに特定の要素が含まれているかどうかを確認する方法"}} end

contains() を使用した要素の存在確認

このステップでは、Java のコレクション内に特定の要素が存在するかどうかを確認する方法を探ります。コレクションは、複数の要素を 1 つの単位にまとめるために使用される基本的なデータ構造です。Java は、List、Set、Map など、さまざまな種類のコレクションを提供しています。

コレクションを操作する際の一般的なタスクの 1 つは、特定の要素が存在するかどうかを判断することです。すべてのコレクション型のルートインターフェースである Java の Collection インターフェースは、この目的のために便利なメソッド contains() を提供しています。

contains() メソッドは 1 つの引数(確認したい要素)を取り、ブール値を返します。要素がコレクション内に見つかった場合は true、そうでない場合は false を返します。

一般的な List の一種である ArrayListcontains() メソッドを使用する方法を示すために、簡単な Java プログラムを作成しましょう。

  1. WebIDE エディタで HelloJava.java ファイルが開いていない場合は、開きます。

  2. ファイルの内容全体を次のコードに置き換えます。

    import java.util.ArrayList;
    import java.util.List;
    
    public class HelloJava {
        public static void main(String[] args) {
            // Create a List of strings
            List<String> fruits = new ArrayList<>();
    
            // Add some fruits to the list
            fruits.add("Apple");
            fruits.add("Banana");
            fruits.add("Orange");
            fruits.add("Mango");
    
            // Check if the list contains "Banana"
            boolean hasBanana = fruits.contains("Banana");
            System.out.println("Does the list contain Banana? " + hasBanana);
    
            // Check if the list contains "Grape"
            boolean hasGrape = fruits.contains("Grape");
            System.out.println("Does the list contain Grape? " + hasGrape);
        }
    }

    この新しいコードを分解してみましょう。

    • import java.util.ArrayList;import java.util.List;:これらの行は、List と ArrayList を操作するために必要なクラスをインポートします。
    • List<String> fruits = new ArrayList<>();:この行は、String オブジェクトを保持できる新しい ArrayList を作成し、fruits という名前の変数に割り当てます。
    • fruits.add("Apple"); などの行:これらの行は、要素(果物の名前を表す文字列)を fruits リストに追加します。
    • boolean hasBanana = fruits.contains("Banana");:この行は、fruits リストで contains() メソッドを呼び出し、文字列 "Banana" が存在するかどうかを確認します。結果(true または false)は、ブール型の変数 hasBanana に格納されます。
    • System.out.println("Does the list contain Banana? " + hasBanana);:この行は、"Banana" の存在確認の結果を出力します。
    • boolean hasGrape = fruits.contains("Grape"); とその後の println:これらの行は、リストに存在しない "Grape" について同じ確認を行います。
  3. ファイルを保存します(Ctrl+S または Cmd+S)。

  4. ターミナルで修正したプログラムをコンパイルします。

    javac HelloJava.java
  5. コンパイルしたプログラムを実行します。

    java HelloJava

    次のような出力が表示されるはずです。

    Does the list contain Banana? true
    Does the list contain Grape? false

この出力は、contains() メソッドが "Banana" がリストにあり、"Grape" がリストにないことを正しく識別したことを確認しています。

要素の存在を確認する方法を理解することは、Java のコレクションを操作する際の基本的なスキルです。次のステップでは、contains() メソッドのさらなる側面と、さまざまなシナリオでの動作を探ります。

異なる要素型でのテスト

前のステップでは、String オブジェクトの Listcontains() メソッドを使用しました。contains() メソッドは汎用性が高く、数値、カスタムオブジェクト、さらには他のコレクションなど、さまざまな型の要素を格納するコレクションで使用できます。

contains() を使用する際、Java はコレクション内のオブジェクトの equals() メソッドに依存して、検索対象の要素が一致するかどうかを判断します。プリミティブ型(intdoubleboolean など)の場合、対応するラッパークラス(IntegerDoubleBoolean)が使用され、それらの equals() メソッドは値を比較します。オブジェクトの場合、デフォルトの equals() メソッドは 2 つのオブジェクト参照が同じメモリ位置を指しているかどうかをチェックします。ただし、多くのクラス(StringInteger など)は、オブジェクトの実際の内容または値を比較するために equals() メソッドをオーバーライドしています。

プログラムを修正して、Integer オブジェクトの List で動作させ、contains() の動作を確認しましょう。

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

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

    import java.util.ArrayList;
    import java.util.List;
    
    public class HelloJava {
        public static void main(String[] args) {
            // Create a List of integers
            List<Integer> numbers = new ArrayList<>();
    
            // Add some numbers to the list
            numbers.add(10);
            numbers.add(25);
            numbers.add(5);
            numbers.add(50);
    
            // Check if the list contains 25
            boolean hasTwentyFive = numbers.contains(25);
            System.out.println("Does the list contain 25? " + hasTwentyFive);
    
            // Check if the list contains 100
            boolean hasOneHundred = numbers.contains(100);
            System.out.println("Does the list contain 100? " + hasOneHundred);
    
            // Check if the list contains the Integer object with value 5
            boolean hasFiveObject = numbers.contains(Integer.valueOf(5));
            System.out.println("Does the list contain Integer object with value 5? " + hasFiveObject);
        }
    }

    このコードでは、以下のことを行っています。

    • Integer オブジェクトを格納する List を作成します:List<Integer> numbers = new ArrayList<>();
    • numbers.add() を使用して整数値をリストに追加します。Java は自動的にプリミティブな int 値(10、25、5、50)を Integer オブジェクトに変換します(これをオートボクシングと呼びます)。
    • numbers.contains(25)numbers.contains(100) を使用して、整数値の存在を確認します。再び、Java はチェックを行う前にプリミティブな int 値 25 と 100 を Integer オブジェクトにオートボクシングします。
    • Integer.valueOf(5) を使用して明示的に Integer オブジェクトを作成し、リストにこの特定のオブジェクトが含まれているかどうかを確認します。
  3. ファイルを保存します。

  4. ターミナルでプログラムをコンパイルします。

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

    java HelloJava

    次のような出力が表示されるはずです。

    Does the list contain 25? true
    Does the list contain 100? false
    Does the list contain Integer object with value 5? true

これは、contains()Integer オブジェクトで正しく動作し、それらの値を比較することを示しています。contains() メソッドは、コレクション内の要素と検索対象の要素の equals() メソッドを効果的に使用します。

次のステップでは、特殊なケースとして、contains() メソッドで null 要素を扱う方法を探ります。

null 要素の扱い

Java では、コレクションに null 要素が含まれることがあります。contains() メソッドが null を扱う際の動作を理解することは重要です。

良いニュースは、contains() メソッドは null 要素を適切に扱うように設計されているということです。コレクションに null が含まれている場合、contains(null) を呼び出すと true が返されます。コレクションに null が含まれていない場合は、false が返されます。これは、一般的に null に対する equals() の実装方法と一致しています(任意のオブジェクトの equals(null)false を返すべきですが、null.equals(anyObject) は、コレクションの contains 実装によって内部的に処理されない場合、NullPointerException をスローします)。

プログラムを修正して、null 要素を含め、その存在を確認しましょう。

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

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

    import java.util.ArrayList;
    import java.util.List;
    
    public class HelloJava {
        public static void main(String[] args) {
            // Create a List that can contain null
            List<String> mixedList = new ArrayList<>();
    
            // Add some elements, including null
            mixedList.add("First");
            mixedList.add(null); // Adding a null element
            mixedList.add("Second");
            mixedList.add(null); // Adding another null element
            mixedList.add("Third");
    
            // Check if the list contains null
            boolean hasNull = mixedList.contains(null);
            System.out.println("Does the list contain null? " + hasNull);
    
            // Check if the list contains a non-existent element
            boolean hasFourth = mixedList.contains("Fourth");
            System.out.println("Does the list contain Fourth? " + hasFourth);
    
            // Check if the list contains "First"
            boolean hasFirst = mixedList.contains("First");
            System.out.println("Does the list contain First? " + hasFirst);
        }
    }

    このコードでは、以下のことを行っています。

    • mixedList という名前の List を作成します。
    • いくつかの String 要素を追加するとともに、mixedList.add(null); を使用して明示的に null を追加します。
    • その後、mixedList.contains(null) を使用して、リストに null 値が含まれているかどうかを確認します。
    • 存在しない文字列 ("Fourth") と存在する文字列 ("First") の存在を確認し、null の確認結果と並べて結果を見ます。
  3. ファイルを保存します。

  4. ターミナルでプログラムをコンパイルします。

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

    java HelloJava

    次のような出力が表示されるはずです。

    Does the list contain null? true
    Does the list contain Fourth? false
    Does the list contain First? true

この出力は、contains() がリスト内の null の存在を正しく識別することを確認しています。コレクションには(特定のコレクション型とその使用方法によって)null が含まれる可能性があり、contains() はその存在を確認する信頼性の高い方法を提供することに注意することが重要です。

これで、Java コレクション内の要素(さまざまなデータ型や null という特殊なケースを含む)の存在を確認するために contains() メソッドを使用する方法を学びました。これは、Java プログラムでコレクションを操作する上で貴重なツールです。

まとめ

この実験では、Java で contains() メソッドを使用してコレクションに特定の要素が含まれているかどうかを確認する方法を学びました。Collection インターフェースを通じて利用できるこのメソッドが、要素の存在を示すブール値を返す仕組みを見てきました。ArrayList での使用例を示し、既存の要素と存在しない要素を正しく識別する様子を確認しました。

また、contains() メソッドがさまざまなデータ型でどのように動作するか、およびコレクション内の null 要素をどのように扱うかを調べました。この実践的な経験を通じて、Java コレクションを操作する際の基本的な操作について実践的な理解を得ることができました。