介绍
在这个实验中,你将学习如何检查 Java 中的 Stack 是否为空。我们将探讨实现这一目标的不同方法,包括标准的 isEmpty() 方法和 size() 方法。你还将学习如何处理栈为 null 的情况。
通过实际操作示例,你将获得使用这些技术来判断 Java Stack 是否为空的实践经验,这是使用该数据结构时的一项基本操作。
使用 isEmpty() 检查栈
在这一步中,你将学习如何使用 isEmpty() 方法来检查 Java 中的 Stack 是否为空。Stack 类是 Java 集合框架(Java Collections Framework)的一部分,它表示一个后进先出(LIFO)的对象栈。在处理栈时,检查栈是否为空是一项常见操作,例如在尝试移除元素之前。
isEmpty() 方法是一种简单而高效的方式,用于判断包括 Stack 在内的集合是否包含任何元素。如果集合为空(不包含任何元素),它将返回 true;否则返回 false。
让我们创建一个简单的 Java 程序来演示 isEmpty() 方法。
如果
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<>();:这行代码创建了一个新的空Stack,它可以容纳String对象。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文件。修改代码,使用
size() == 0代替isEmpty():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.size() == 0替换了stack.isEmpty()来检查栈是否为空。 - 我们还添加了一行代码,使用
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()会返回元素的数量。
使用空栈进行测试
在前面的步骤中,你学习了如何使用 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 是多么重要。你可以使用一个简单的条件语句来检查对象是否为 null:if (stack != null) { ... }。
总结
在本次实验中,你学习了如何检查 Java 中的 Stack 是否为空。你探索了实现此目的的主要方法 isEmpty(),它是 Java 集合框架(Java Collections Framework)的一部分。你了解了如何使用 isEmpty() 来判断栈中是否包含任何元素,若栈为空则返回 true,否则返回 false。
你通过创建一个新的 Stack,在添加元素前后检查其是否为空,并打印结果,演示了 isEmpty() 的使用方法。这个实践练习加深了你对如何在 Java 程序中有效使用 isEmpty() 方法检查栈是否为空的理解。



