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

JavaJavaBeginner
今すぐ練習

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

はじめに

この実験では、Java の Queue が空かどうかをチェックする方法を学びます。これは、キューを操作する際にエラーを防ぐために重要なスキルです。

このチェックに使用する主なメソッドである isEmpty() を調べ、size() メソッドを使用してキューの状態を確認する方法も見ていきます。さらに、キューが null である可能性があるシナリオの対処方法についても説明します。実践的な例を通じて、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/BasicSyntaxGroup -.-> java/if_else("If...Else") java/DataStructuresGroup -.-> java/collections_methods("Collections Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/exceptions("Exceptions") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/linkedlist("LinkedList") subgraph Lab Skills java/if_else -.-> lab-559972{{"Java でキューが空かどうかをチェックする方法"}} java/collections_methods -.-> lab-559972{{"Java でキューが空かどうかをチェックする方法"}} java/exceptions -.-> lab-559972{{"Java でキューが空かどうかをチェックする方法"}} java/linkedlist -.-> lab-559972{{"Java でキューが空かどうかをチェックする方法"}} end

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

このステップでは、isEmpty() メソッドを使用して Java の Queue が空かどうかをチェックする方法を探ります。これは、コレクションを操作する際の基本的な操作であり、空のキューから要素にアクセスしようとしたときに発生する可能性のあるエラーを回避することができます。

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

  1. WebIDE を開き、左側のファイルエクスプローラーで ~/project ディレクトリに移動します。

  2. ファイルエクスプローラーの空白部分を右クリックし、「新しいファイル」を選択して、QueueCheck.java と名付けます。

  3. エディターで QueueCheck.java ファイルを開きます。

  4. 次のコードをエディターにコピーして貼り付けます。

    import java.util.LinkedList;
    import java.util.Queue;
    
    public class QueueCheck {
    
        public static void main(String[] args) {
            // Create a Queue using LinkedList
            Queue<String> myQueue = new LinkedList<>();
    
            // Check if the queue is empty
            boolean isEmptyBeforeAdd = myQueue.isEmpty();
            System.out.println("Is the queue empty before adding elements? " + isEmptyBeforeAdd);
    
            // Add some elements to the queue
            myQueue.add("Element 1");
            myQueue.add("Element 2");
    
            // Check if the queue is empty again
            boolean isEmptyAfterAdd = myQueue.isEmpty();
            System.out.println("Is the queue empty after adding elements? " + isEmptyAfterAdd);
        }
    }

    このコードの新しい部分を素早く見てみましょう。

    • import java.util.LinkedList;import java.util.Queue;:これらの行は、キューを操作するために必要なクラスをインポートします。Queue インターフェースの具体的な実装として LinkedList を使用しています。
    • Queue<String> myQueue = new LinkedList<>();:この行は、String 要素を保持できる myQueue という名前の新しい Queue オブジェクトを作成します。
    • myQueue.isEmpty():これが今回注目するメソッドです。キューに要素が含まれていない場合は true を返し、それ以外の場合は false を返します。
    • myQueue.add("Element 1");:これは、キューの末尾に要素を追加します。
  5. QueueCheck.java ファイルを保存します(Ctrl+S または Cmd+S)。

  6. WebIDE の下部にあるターミナルを開きます。~/project ディレクトリにいることを確認します。そうでない場合は、cd ~/project と入力して Enter キーを押します。

  7. 次のコマンドを入力して Enter キーを押し、Java プログラムをコンパイルします。

    javac QueueCheck.java

    コンパイルが成功すると、何も出力されません。~/project ディレクトリに QueueCheck.class ファイルが作成されます。

  8. 次のコマンドを入力して Enter キーを押し、コンパイルされた Java プログラムを実行します。

    java QueueCheck

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

    Is the queue empty before adding elements? true
    Is the queue empty after adding elements? false

この出力は、isEmpty() メソッドが要素を追加する前と後のキューの状態を正しく報告したことを確認しています。isEmpty() を使用することは、コレクションが空かどうかをチェックする推奨される方法です。特に特定のコレクションの実装では、サイズがゼロかどうかをチェックするよりも一般的に効率的です。

size() メソッドで確認する

前のステップでは、キューが空かどうかをチェックするために isEmpty() メソッドを使用する方法を学びました。コレクションが空かどうかを判断する別の方法は、そのサイズをチェックすることです。size() メソッドは、コレクション内の要素の数を返します。サイズが 0 の場合、コレクションは空です。

特定のコレクションタイプでは潜在的なパフォーマンス上の利点があるため、空であることをチェックする際には一般的に isEmpty() が推奨されますが、size() の使い方を理解することも重要です。

QueueCheck.java プログラムを修正して、size() メソッドも使用するようにしましょう。

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

  2. main メソッドを修正して、size() メソッドを使用したチェックを含めます。既存の main メソッドを次のコードに置き換えます。

    import java.util.LinkedList;
    import java.util.Queue;
    
    public class QueueCheck {
    
        public static void main(String[] args) {
            // Create a Queue using LinkedList
            Queue<String> myQueue = new LinkedList<>();
    
            // Check if the queue is empty using isEmpty()
            boolean isEmptyBeforeAdd = myQueue.isEmpty();
            System.out.println("Is the queue empty before adding elements (isEmpty())? " + isEmptyBeforeAdd);
    
            // Check if the queue is empty using size()
            boolean isEmptyBySizeBeforeAdd = (myQueue.size() == 0);
            System.out.println("Is the queue empty before adding elements (size() == 0)? " + isEmptyBySizeBeforeAdd);
    
    
            // Add some elements to the queue
            myQueue.add("Element 1");
            myQueue.add("Element 2");
    
            // Check if the queue is empty again using isEmpty()
            boolean isEmptyAfterAdd = myQueue.isEmpty();
            System.out.println("Is the queue empty after adding elements (isEmpty())? " + isEmptyAfterAdd);
    
            // Check if the queue is empty again using size()
            boolean isEmptyBySizeAfterAdd = (myQueue.size() == 0);
            System.out.println("Is the queue empty after adding elements (size() == 0)? " + isEmptyBySizeAfterAdd);
    
            // Print the size of the queue
            System.out.println("Current queue size: " + myQueue.size());
        }
    }

    この更新されたコードでは、要素を追加する前と後の両方で、キューの size() が 0 と等しいかどうかをチェックする行を追加しています。また、キューの最終的なサイズも出力しています。

  3. 修正した QueueCheck.java ファイルを保存します。

  4. ターミナルを開き、~/project ディレクトリにいることを確認します。

  5. 更新された Java プログラムをコンパイルします。

    javac QueueCheck.java
  6. コンパイルされたプログラムを実行します。

    java QueueCheck

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

    Is the queue empty before adding elements (isEmpty())? true
    Is the queue empty before adding elements (size() == 0)? true
    Is the queue empty after adding elements (isEmpty())? false
    Is the queue empty after adding elements (size() == 0)? false
    Current queue size: 2

ご覧の通り、isEmpty()size() == 0 をチェックすることの両方が、キューが空かどうかを判断するために同じ結果をもたらします。size() メソッドは、現在キューにいくつの要素があるかを正確に知るためにも便利です。

ヌルキューの扱い

前のステップでは、適切に初期化された Queue オブジェクトを扱いました。しかし、実際のプログラミングでは、Queue(または任意のオブジェクト)への参照が null である状況に遭遇する可能性があります。null オブジェクトに対してメソッドを呼び出そうとすると、NullPointerException が発生します。これは Java で一般的なランタイムエラーです。

これらのエラーを防ぐために、潜在的な null 参照を適切に扱うことが重要です。Queue に対して isEmpty()size() などのメソッドを呼び出す前に、常にキューの参照自体が null でないかをチェックする必要があります。

QueueCheck.java プログラムをもう一度修正して、null キューをどのように扱うかを示しましょう。

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

  2. main メソッドを修正して、null キューのチェックを含めます。既存の main メソッドを次のコードに置き換えます。

    import java.util.LinkedList;
    import java.util.Queue;
    
    public class QueueCheck {
    
        public static void main(String[] args) {
            // Create a Queue using LinkedList
            Queue<String> myQueue = new LinkedList<>();
    
            // Check if the queue is null before checking emptiness or size
            if (myQueue != null) {
                // Check if the queue is empty using isEmpty()
                boolean isEmptyBeforeAdd = myQueue.isEmpty();
                System.out.println("Is the queue empty before adding elements (isEmpty())? " + isEmptyBeforeAdd);
    
                // Check if the queue is empty using size()
                boolean isEmptyBySizeBeforeAdd = (myQueue.size() == 0);
                System.out.println("Is the queue empty before adding elements (size() == 0)? " + isEmptyBySizeBeforeAdd);
    
    
                // Add some elements to the queue
                myQueue.add("Element 1");
                myQueue.add("Element 2");
    
                // Check if the queue is empty again using isEmpty()
                boolean isEmptyAfterAdd = myQueue.isEmpty();
                System.out.println("Is the queue empty after adding elements (isEmpty())? " + isEmptyAfterAdd);
    
                // Check if the queue is empty again using size()
                boolean isEmptyBySizeAfterAdd = (myQueue.size() == 0);
                System.out.println("Is the queue empty after adding elements (size() == 0)? " + isEmptyBySizeAfterAdd);
    
                // Print the size of the queue
                System.out.println("Current queue size: " + myQueue.size());
            } else {
                System.out.println("The queue is null. Cannot perform operations.");
            }
    
            // Example with a null queue reference
            Queue<String> nullQueue = null;
    
            // Attempting to check isEmpty() or size() on nullQueue without a null check would cause a NullPointerException
            System.out.println("\nChecking a potentially null queue:");
            if (nullQueue != null) {
                 boolean isNullQueueEmpty = nullQueue.isEmpty();
                 System.out.println("Is the null queue empty? " + isNullQueueEmpty);
            } else {
                 System.out.println("The null queue is indeed null. Handled correctly.");
            }
        }
    }

    元の myQueue を操作するコードを if (myQueue != null) ブロックで囲みました。これにより、myQueuenull でない場合のみメソッドを呼び出すことが保証されます。また、明示的に null に設定された変数をチェックするセクションも追加しました。

  3. 修正した QueueCheck.java ファイルを保存します。

  4. ターミナルを開き、~/project ディレクトリにいることを確認します。

  5. 更新された Java プログラムをコンパイルします。

    javac QueueCheck.java
  6. コンパイルされたプログラムを実行します。

    java QueueCheck

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

    Is the queue empty before adding elements (isEmpty())? true
    Is the queue empty before adding elements (size() == 0)? true
    Is the queue empty after adding elements (isEmpty())? false
    Is the queue empty after adding elements (size() == 0)? false
    Current queue size: 2
    
    Checking a potentially null queue:
    The null queue is indeed null. Handled correctly.

この出力は、キューが初期化されている場合とキューの参照が null である場合の両方をコードが正しく扱い、NullPointerException を防いでいることを示しています。Java でオブジェクト参照を扱うとき、特に外部ソースからの参照や null を返す可能性のある操作の結果である場合、常に null をチェックすることを忘れないでください。

まとめ

この実験では、Java の Queue が空かどうかをチェックする方法を学びました。主に isEmpty() メソッドの使用に焦点を当てました。これはこのチェックを行う標準的かつ推奨される方法です。isEmpty() が空のキューに対して true を返し、要素が追加された後は false を返すことを示す簡単な Java プログラムを作成しました。

さらに、空であることをチェックする別の方法として size() メソッドを調べました。サイズが 0 であることは、キューが空であることを示します。最後に、キューオブジェクトに対してメソッドを呼び出す前に、そのオブジェクトが null でないかをチェックすることで、潜在的な NullPointerException を適切に扱う重要性についても議論しました。