Java で Stack が空かどうかを確認する方法

JavaJavaBeginner
今すぐ練習

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

はじめに

この実験では、Java の Stack が空かどうかを確認する方法を学びます。標準の isEmpty() メソッドや size() メソッドなど、これを実現するためのさまざまな方法を探ります。また、null のスタックの場合の対処方法も学びます。

実践的な例を通じて、Java の Stack の空状態を判断するためにこれらの技術を使用する実際の経験を積むことができます。これは、このデータ構造を扱う際の基本的な操作です。


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/arrays_methods("Arrays Methods") java/DataStructuresGroup -.-> java/collections_methods("Collections Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/exceptions("Exceptions") java/SystemandDataProcessingGroup -.-> java/object_methods("Object Methods") subgraph Lab Skills java/if_else -.-> lab-559976{{"Java で Stack が空かどうかを確認する方法"}} java/arrays_methods -.-> lab-559976{{"Java で Stack が空かどうかを確認する方法"}} java/collections_methods -.-> lab-559976{{"Java で Stack が空かどうかを確認する方法"}} java/exceptions -.-> lab-559976{{"Java で Stack が空かどうかを確認する方法"}} java/object_methods -.-> lab-559976{{"Java で Stack が空かどうかを確認する方法"}} end

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

このステップでは、Java の Stack が空かどうかを isEmpty() メソッドを使って確認する方法を学びます。Stack クラスは Java コレクションフレームワークの一部で、オブジェクトの後入れ先出し (LIFO: Last-In, First-Out) スタックを表します。スタックが空かどうかを確認することは、スタックを扱う際の一般的な操作です。たとえば、要素を削除しようとする前に行います。

isEmpty() メソッドは、Stack を含むコレクションが要素を含んでいるかどうかを判断する簡単で効率的な方法です。コレクションが空(要素を含まない)場合は true を返し、それ以外の場合は false を返します。

isEmpty() メソッドを実証する簡単な Java プログラムを作成しましょう。

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

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

    import java.util.Stack;
    
    public class HelloJava {
        public static void main(String[] args) {
            // Create a new Stack
            Stack<String> stack = new Stack<>();
    
            // Check if the stack is empty using isEmpty()
            boolean isEmptyBeforePush = stack.isEmpty();
            System.out.println("Is the stack empty before pushing elements? " + isEmptyBeforePush);
    
            // Push some elements onto the stack
            stack.push("Element 1");
            stack.push("Element 2");
    
            // Check if the stack is empty after pushing elements
            boolean isEmptyAfterPush = stack.isEmpty();
            System.out.println("Is the stack empty after pushing elements? " + isEmptyAfterPush);
        }
    }

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

    • import java.util.Stack;: この行は Stack クラスをインポートし、プログラムで使用できるようにします。
    • Stack<String> stack = new Stack<>();: この行は、String オブジェクトを保持できる新しい空の Stack を作成します。
    • stack.isEmpty();: これが今回注目するメソッドです。stack オブジェクトが空かどうかを確認します。
    • stack.push("...");: このメソッドは、要素をスタックのトップに追加します。
  3. ファイルを保存します(Ctrl+S または Cmd+S)。

  4. では、修正したプログラムをコンパイルしましょう。ターミナルで、~/project ディレクトリにいることを確認してから、次のコマンドを実行します。

    javac HelloJava.java

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

  5. 最後に、プログラムを実行しましょう。

    java HelloJava

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

    Is the stack empty before pushing elements? true
    Is the stack empty after pushing elements? false

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

size() メソッドを使用したチェック

前のステップでは、isEmpty() メソッドを使用してスタックが空かどうかを確認しました。Stack を含むコレクションに対して有用な別のメソッドは size() メソッドです。size() メソッドは、現在コレクションに含まれる要素の数を返します。このメソッドを使用して、スタックのサイズが 0 かどうかを確認することで、スタックが空かどうかを調べることができます。

isEmpty() は、コレクションが空かどうかを単純に確認する場合、時にはより効率的であるため一般的に推奨されますが、size() == 0 を確認することでも同じ結果が得られます。両方のメソッドを知っておくと良いでしょう。

プログラムを修正して、size() メソッドを使用して空状態を確認しましょう。

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

  2. コードを修正して、isEmpty() の代わりに size() == 0 を使用するようにします。

    import java.util.Stack;
    
    public class HelloJava {
        public static void main(String[] args) {
            // Create a new Stack
            Stack<String> stack = new Stack<>();
    
            // Check if the stack is empty using size()
            boolean isEmptyBeforePush = stack.size() == 0;
            System.out.println("Is the stack empty before pushing elements? " + isEmptyBeforePush);
    
            // Push some elements onto the stack
            stack.push("Element A");
            stack.push("Element B");
            stack.push("Element C");
    
            // Check the size of the stack after pushing elements
            int sizeAfterPush = stack.size();
            System.out.println("Size of the stack after pushing elements: " + sizeAfterPush);
    
            // Check if the stack is empty after pushing elements using size()
            boolean isEmptyAfterPush = stack.size() == 0;
            System.out.println("Is the stack empty after pushing elements? " + isEmptyAfterPush);
        }
    }

    変更点に注目してください。

    • 空状態を確認するために、stack.isEmpty()stack.size() == 0 に置き換えました。
    • stack.size() を使用して要素を追加した後のスタックの実際のサイズを出力する行も追加しました。
  3. ファイルを保存します(Ctrl+S または Cmd+S)。

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

    javac HelloJava.java

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

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

    java HelloJava

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

    Is the stack empty before pushing elements? true
    Size of the stack after pushing elements: 3
    Is the stack empty after pushing elements? false

    この出力は、stack.size() == 0 を確認することで空のスタックを正しく識別でき、stack.size() が要素の数を返すことを示しています。

ヌルの Stack でテスト

前のステップでは、isEmpty()size() を使用して Stack が空かどうかを確認する方法を学びました。また、Stack オブジェクト自体が null の場合に何が起こるかを理解することも重要です。Java では、null は変数が何らかのオブジェクトを参照していないことを意味します。null オブジェクトに対してメソッドを呼び出そうとすると、一般的なランタイムエラーである NullPointerException が発生します。

これを実際に見て、その処理方法を学びましょう。

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

  2. コードを修正して、スタックを null に設定し、その後で空かどうかを確認しようとします。

    import java.util.Stack;
    
    public class HelloJava {
        public static void main(String[] args) {
            // Create a new Stack and then set it to null
            Stack<String> stack = new Stack<>();
            stack.push("Some Element"); // Add an element first
            stack = null; // Now set the stack variable to null
    
            // Try to check if the stack is empty using isEmpty()
            try {
                boolean isEmpty = stack.isEmpty(); // This line will cause an error
                System.out.println("Is the stack empty? " + isEmpty);
            } catch (NullPointerException e) {
                System.out.println("Caught a NullPointerException! The stack object is null.");
            }
    
            // Try to check the size using size()
            try {
                 int size = stack.size(); // This line will also cause an error
                 System.out.println("Size of the stack: " + size);
            } catch (NullPointerException e) {
                 System.out.println("Caught a NullPointerException! Cannot get size of a null stack.");
            }
        }
    }

    新しい部分は次の通りです。

    • stack = null;: この行は、stack 変数が null を指すようにします。以前に作成した Stack オブジェクトは、この変数を通じてはもうアクセスできなくなります。
    • try { ... } catch (NullPointerException e) { ... }: これは try-catch ブロックです。try ブロック内のコードの実行中に発生する可能性のあるエラー(例外)を処理するために使用されます。NullPointerException が発生した場合、catch ブロック内のコードが実行されます。
  3. ファイルを保存します(Ctrl+S または Cmd+S)。

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

    javac HelloJava.java

    コンパイルは成功するはずです。

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

    java HelloJava

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

    Caught a NullPointerException! The stack object is null.
    Caught a NullPointerException! Cannot get size of a null stack.

    この出力は、null のスタック変数に対して isEmpty() または size() を呼び出そうとすると NullPointerException が発生し、try-catch ブロックがこれらの例外を正常に処理したことを示しています。

これは、オブジェクトに対してメソッドを呼び出す前に、そのオブジェクトが null でないことを確認することが重要である理由を示しています。単純な条件 if (stack != null) { ... } を使用して、オブジェクトが null でないことを確認することができます。

まとめ

この実験では、Java の Stack が空かどうかを確認する方法を学びました。この目的のための主要なメソッドである isEmpty() を調べました。このメソッドは Java コレクションフレームワークの一部です。isEmpty() を使って、スタックに要素が含まれているかどうかを判断する方法を見ました。空のスタックの場合は true を返し、そうでない場合は false を返します。

新しい Stack を作成し、要素を追加する前後でその空の状態を確認し、結果を出力することで、isEmpty() の使用方法を実証しました。この実践的な演習により、Java プログラムで isEmpty() メソッドを使ってスタックの空状態を効果的に確認する方法を理解を深めました。