Java で Set が空かどうかをチェックする方法

JavaJavaBeginner
今すぐ練習

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

はじめに

この実験では、Java の Set が空かどうかをチェックする方法を学びます。セットに要素が含まれているかどうかを判断する簡単で効率的な方法である標準の isEmpty() メソッドを調べます。

また、size() メソッドを使用してセットのサイズを確認する方法を学び、ヌルセットを扱う際に潜在的な NullPointerException をどのように処理するかを理解します。この実験の終わりまでに、様々なシナリオで Java のセットの空性をチェックすることができるようになります。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java/BasicSyntaxGroup -.-> java/if_else("If...Else") java/DataStructuresGroup -.-> java/collections_methods("Collections Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/hashset("HashSet") java/SystemandDataProcessingGroup -.-> java/object_methods("Object Methods") subgraph Lab Skills java/if_else -.-> lab-559975{{"Java で Set が空かどうかをチェックする方法"}} java/collections_methods -.-> lab-559975{{"Java で Set が空かどうかをチェックする方法"}} java/hashset -.-> lab-559975{{"Java で Set が空かどうかをチェックする方法"}} java/object_methods -.-> lab-559975{{"Java で Set が空かどうかをチェックする方法"}} end

isEmpty() を使用した Set の空チェック

このステップでは、isEmpty() メソッドを使用して Java の Set が空かどうかをチェックする方法を学びます。Set は重複要素を含むことができないコレクションです。isEmpty() メソッドは、コレクションに要素が含まれているかどうかを判断する簡単で効率的な方法です。

  1. まず、~/project ディレクトリに SetCheck.java という名前の新しい Java ファイルを作成しましょう。左側のファイルエクスプローラーで右クリックして「新しいファイル」を選択し、SetCheck.java と入力することで作成できます。

  2. エディタで SetCheck.java ファイルを開き、以下のコードを追加します。

    import java.util.HashSet;
    import java.util.Set;
    
    public class SetCheck {
    
        public static void main(String[] args) {
            // Create a new HashSet
            Set<String> fruits = new HashSet<>();
    
            // Check if the set is empty using isEmpty()
            boolean isEmptyBeforeAdd = fruits.isEmpty();
            System.out.println("Is the fruits set empty before adding elements? " + isEmptyBeforeAdd);
    
            // Add some elements to the set
            fruits.add("Apple");
            fruits.add("Banana");
            fruits.add("Orange");
    
            // Check if the set is empty after adding elements
            boolean isEmptyAfterAdd = fruits.isEmpty();
            System.out.println("Is the fruits set empty after adding elements? " + isEmptyAfterAdd);
        }
    }

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

    • import java.util.HashSet;import java.util.Set;:これらの行は、SetHashSet を使用するために必要なクラスをインポートします。
    • Set<String> fruits = new HashSet<>();:この行は、fruits という名前の新しい HashSet オブジェクトを作成します。<String> を指定することで、このセットが String オブジェクトを格納することを示します。
    • boolean isEmptyBeforeAdd = fruits.isEmpty();:この行は、fruits セットに対して isEmpty() メソッドを呼び出し、結果(true または false)を isEmptyBeforeAdd という名前のブール型変数に格納します。
    • fruits.add("Apple");:この行は、文字列 "Apple" を fruits セットに追加します。
    • boolean isEmptyAfterAdd = fruits.isEmpty();:この行は、要素を追加した後にセットが空かどうかを再度チェックします。
  3. SetCheck.java ファイルを保存します(Ctrl+S または Cmd+S)。

  4. 次に、Java プログラムをコンパイルしましょう。WebIDE の下部にあるターミナルを開き、~/project ディレクトリにいることを確認します。その後、以下のコマンドを実行します。

    javac SetCheck.java

    コンパイルが成功すると、何も出力されません。

  5. 最後に、java コマンドを使用してコンパイルされたプログラムを実行します。

    java SetCheck

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

    Is the fruits set empty before adding elements? true
    Is the fruits set empty after adding elements? false

    この出力は、isEmpty() メソッドが要素を追加する前と後のセットの状態を正しく報告したことを確認しています。

size() を使用した Set のサイズ確認

前のステップでは、isEmpty() を使用して Set が空かどうかをチェックする方法を学びました。もう 1 つの一般的な操作は、Set にいくつの要素が含まれているかを調べることです。これには size() メソッドを使用します。size() メソッドは、現在セットに含まれている要素の数を返します。

  1. WebIDE のエディタで ~/project ディレクトリにある SetCheck.java ファイルを開きます。

  2. main メソッドを修正して、size() メソッドの呼び出しを含めます。既存の main メソッドを以下のコードに置き換えます。

    import java.util.HashSet;
    import java.util.Set;
    
    public class SetCheck {
    
        public static void main(String[] args) {
            // Create a new HashSet
            Set<String> fruits = new HashSet<>();
    
            // Check the size of the set before adding elements
            int sizeBeforeAdd = fruits.size();
            System.out.println("Size of the fruits set before adding elements: " + sizeBeforeAdd);
    
            // Add some elements to the set
            fruits.add("Apple");
            fruits.add("Banana");
            fruits.add("Orange");
    
            // Check the size of the set after adding elements
            int sizeAfterAdd = fruits.size();
            System.out.println("Size of the fruits set after adding elements: " + sizeAfterAdd);
    
            // Add a duplicate element (Sets do not allow duplicates)
            fruits.add("Apple");
    
            // Check the size again
            int sizeAfterDuplicateAdd = fruits.size();
            System.out.println("Size of the fruits set after adding a duplicate: " + sizeAfterDuplicateAdd);
        }
    }

    追加した部分は以下の通りです。

    • int sizeBeforeAdd = fruits.size();:この行は、fruits セットに対して size() メソッドを呼び出し、返された整数値(要素の数)を sizeBeforeAdd という名前の変数に格納します。
    • int sizeAfterAdd = fruits.size();:これは、最初の 3 つの要素を追加した後のサイズをチェックします。
    • fruits.add("Apple");:再度 "Apple" を追加しようとします。"Apple" はすでにセットに含まれているため、この操作はセットの内容を変更しません。
    • int sizeAfterDuplicateAdd = fruits.size();:これは、重複要素を追加しようとした後のサイズをチェックします。
  3. SetCheck.java ファイルを保存します。

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

    javac SetCheck.java

    再び、出力がないことはコンパイルが成功したことを示します。

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

    java SetCheck

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

    Size of the fruits set before adding elements: 0
    Size of the fruits set after adding elements: 3
    Size of the fruits set after adding a duplicate: 3

    この出力は、size() メソッドが要素の数を正しく報告し、重複要素を追加してもセットのサイズが増えないことを示しています。

ヌルセットの扱い

前のステップでは、適切に初期化された Set を扱いました。しかし、実際のプログラミングでは、Set 変数が null である状況に遭遇することがあります。null オブジェクトに対して isEmpty()size() などのメソッドを呼び出そうとすると、Java で一般的なエラーである NullPointerException が発生します。これらのケースを適切に扱うことは重要です。

  1. WebIDE のエディタで ~/project ディレクトリにある SetCheck.java ファイルを開きます。

  2. main メソッドを修正して、null セットをどのように扱うかを示します。既存の main メソッドを以下のコードに置き換えます。

    import java.util.HashSet;
    import java.util.Set;
    
    public class SetCheck {
    
        public static void main(String[] args) {
            // Declare a Set variable but initialize it to null
            Set<String> colors = null;
    
            // Attempting to call isEmpty() or size() here would cause a NullPointerException
            // System.out.println("Is the colors set empty? " + colors.isEmpty()); // This would crash!
    
            // To safely check if a set is null or empty, we first check for null
            if (colors == null) {
                System.out.println("The colors set is null.");
            } else {
                // If it's not null, we can safely check if it's empty
                if (colors.isEmpty()) {
                    System.out.println("The colors set is empty.");
                } else {
                    System.out.println("The colors set is not empty and has " + colors.size() + " elements.");
                }
            }
    
            // Now, let's initialize the set and add elements
            colors = new HashSet<>();
            colors.add("Red");
            colors.add("Blue");
    
            // Check again after initialization and adding elements
            if (colors == null) {
                System.out.println("The colors set is null.");
            } else {
                if (colors.isEmpty()) {
                    System.out.println("The colors set is empty.");
                } else {
                    System.out.println("The colors set is not empty and has " + colors.size() + " elements.");
                }
            }
        }
    }

    この更新されたコードでは:

    • Set<String> colors = null;Set 変数 colors を宣言し、明示的に null に設定します。
    • NullPointerException を引き起こす行をコメントアウトしました。
    • if (colors == null):これが重要なチェックです。colors 変数に対してメソッドを呼び出す前に、まず null かどうかをチェックします。
    • colorsnull でない場合、colors.isEmpty() を使用して空かどうかをチェックするか、colors.size() を使用してサイズを取得します。
    • その後、colors を新しい HashSet で初期化し、要素を追加して、セットが null でも空でもない場合の異なる出力を示します。
  3. SetCheck.java ファイルを保存します。

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

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

    java SetCheck

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

    The colors set is null.
    The colors set is not empty and has 2 elements.

    これは、Set 変数のメソッドにアクセスしようとする前に、潜在的な null 値を安全に扱う方法を示しています。初期化されていない可能性のあるオブジェクト参照を扱う場合は、常に最初に null をチェックしてください。

まとめ

この実験では、Java の Set が空かどうかをチェックする方法を学びました。まず、このチェックを行う標準的で最も効率的な方法である isEmpty() メソッドを使用しました。HashSet を作成し、要素を追加する前後でその空の状態をチェックし、isEmpty() のブール型の出力を観察しました。これにより、セットに要素が含まれているかどうかを判断するための isEmpty() の基本的な使い方が示されました。