Введение
В этом практическом занятии (лабораторной работе) вы узнаете, как проверить, пуст ли Stack (стек) в Java. Мы рассмотрим различные методы для этого, в том числе стандартный метод isEmpty() и метод size(). Вы также узнаете, как обрабатывать случай, когда стек равен null.
С помощью практических примеров вы получите практический опыт использования этих методов для определения пустоты Java-стеков (Stack), что является фундаментальной операцией при работе с этой структурой данных.
Использование метода isEmpty() для проверки стека
На этом этапе мы узнаем, как проверить, пуст ли Stack (стек) в Java с помощью метода isEmpty(). Класс Stack является частью Фреймворка коллекций Java и представляет собой стек объектов с принципом «последним пришел — первым ушел» (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() для проверки пустоты.
Откройте файл
HelloJava.javaв редакторе WebIDE.Измените код, заменив
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()возвращает количество элементов.
Тестирование с нулевым стеком
На предыдущих этапах мы узнали, как проверить, пуст ли Stack с использованием методов isEmpty() и size(). Также важно понять, что происходит, если сам объект Stack равен null. В Java null означает, что переменная не ссылается на какой-либо объект. Попытка вызвать метод у объекта, равного null, приведет к NullPointerException (исключению по нулевой ссылке), которое является распространенной ошибкой времени выполнения.
Давайте посмотрим, как это работает на практике и узнаем, как обрабатывать такую ситуацию.
Откройте файл
HelloJava.javaв редакторе WebIDE.Измените код так, чтобы установить стек в значение
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.Этот вывод показывает, что попытка вызвать методы
isEmpty()илиsize()у переменной стека, равнойnull, приводит кNullPointerException, и наши блокиtry-catchуспешно обработали эти исключения.
Это демонстрирует, почему крайне важно убедиться, что объект не равен null перед вызовом методов на нем. Вы можете проверить, равен ли объект null, используя простое условие: if (stack != null) { ... }.
Резюме
В этом практическом занятии мы узнали, как проверить, пуст ли Stack в Java. Мы изучили основной метод для этой цели - isEmpty(), который является частью Фреймворка коллекций Java (Java Collections Framework). Мы увидели, как использовать isEmpty() для определения, содержит ли стек какие-либо элементы, при этом метод возвращает true, если стек пуст, и false в противном случае.
Мы продемонстрировали использование isEmpty() путем создания нового Stack, проверки его пустого состояния до и после добавления элементов и вывода результатов. Эта практическая задача закрепила наше понимание того, как эффективно использовать метод isEmpty() для проверки пустоты стека в Java-программах.



