はじめに
この実験では、Java の Stack が空かどうかを確認する方法を学びます。標準の isEmpty() メソッドや size() メソッドなど、これを実現するためのさまざまな方法を探ります。また、null のスタックの場合の対処方法も学びます。
実践的な例を通じて、Java の Stack の空状態を判断するためにこれらの技術を使用する実際の経験を積むことができます。これは、このデータ構造を扱う際の基本的な操作です。
isEmpty() を使って Stack を確認する
このステップでは、Java の Stack が空かどうかを isEmpty() メソッドを使って確認する方法を学びます。Stack クラスは Java コレクションフレームワークの一部で、オブジェクトの後入れ先出し (LIFO: Last-In, First-Out) スタックを表します。スタックが空かどうかを確認することは、スタックを扱う際の一般的な操作です。たとえば、要素を削除しようとする前に行います。
isEmpty() メソッドは、Stack を含むコレクションが要素を含んでいるかどうかを判断する簡単で効率的な方法です。コレクションが空(要素を含まない)場合は true を返し、それ以外の場合は false を返します。
isEmpty() メソッドを実証する簡単な Java プログラムを作成しましょう。
HelloJava.javaファイルがまだ開いていない場合は、WebIDE エディタで開きます。ファイルの内容全体を次のコードに置き換えます。
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("...");: このメソッドは、要素をスタックのトップに追加します。
ファイルを保存します(Ctrl+S または Cmd+S)。
では、修正したプログラムをコンパイルしましょう。ターミナルで、
~/projectディレクトリにいることを確認してから、次のコマンドを実行します。javac HelloJava.javaコンパイルが成功すると、何も出力されません。
最後に、プログラムを実行しましょう。
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() メソッドを使用して空状態を確認しましょう。
WebIDE エディタで
HelloJava.javaファイルを開きます。コードを修正して、
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()を使用して要素を追加した後のスタックの実際のサイズを出力する行も追加しました。
- 空状態を確認するために、
ファイルを保存します(Ctrl+S または Cmd+S)。
ターミナルで修正したプログラムをコンパイルします。
javac HelloJava.java再び、出力がないことはコンパイルが成功したことを意味します。
プログラムを実行します。
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()が要素の数を返すことを示しています。
Null Stack でテストする
前のステップでは、isEmpty() と size() を使用して Stack が空かどうかを確認する方法を学びました。また、Stack オブジェクト自体が null の場合に何が起こるかを理解することも重要です。Java では、null は変数が何らかのオブジェクトを参照していないことを意味します。null オブジェクトに対してメソッドを呼び出そうとすると、一般的なランタイムエラーである NullPointerException が発生します。
これを実際に見て、その処理方法を学びましょう。
WebIDE エディタで
HelloJava.javaファイルを開きます。コードを修正して、スタックを
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ブロック内のコードが実行されます。
ファイルを保存します(Ctrl+S または Cmd+S)。
ターミナルでプログラムをコンパイルします。
javac HelloJava.javaコンパイルは成功するはずです。
プログラムを実行します。
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() メソッドを使ってスタックの空状態を効果的に確認する方法を理解を深めました。



