Введение
В этом практическом занятии (лабораторной работе) вы научитесь проверять, пуста ли очередь (Queue) в Java. Это важный навык для предотвращения ошибок при работе с очередями.
Мы рассмотрим основной метод для такой проверки, isEmpty(), а также увидим, как проверить состояние очереди с использованием метода size(). Кроме того, мы обсудим, как обрабатывать ситуации, когда очередь может быть равна null. С помощью практических примеров вы получите практический опыт определения пустоты очереди в Java.
Использование метода isEmpty() для проверки очереди
На этом этапе мы рассмотрим, как проверить, пуста ли очередь (Queue) в Java с использованием метода isEmpty(). Это фундаментальная операция при работе с коллекциями, так как позволяет избежать ошибок, которые могут возникнуть при попытке доступа к элементам пустой очереди.
Сначала создадим простую Java-программу, которая демонстрирует использование метода isEmpty().
Откройте WebIDE и перейдите в каталог
~/projectв проводнике файлов слева.Щелкните правой кнопкой мыши в пустом пространстве проводника файлов, выберите "Новый файл" и назовите его
QueueCheck.java.Откройте файл
QueueCheck.javaв редакторе.Скопируйте и вставьте следующий код в редактор:
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;: Эти строки импортируют необходимые классы для работы с очередями. Мы используемLinkedListв качестве конкретной реализации интерфейсаQueue.Queue<String> myQueue = new LinkedList<>();: Эта строка создает новый объект очереди с именемmyQueue, который может хранить элементы типаString.myQueue.isEmpty(): Это метод, на который мы сосредотачиваемся. Он возвращаетtrue, если очередь не содержит элементов, иfalseв противном случае.myQueue.add("Element 1");: Эта строка добавляет элемент в конец очереди.
Сохраните файл
QueueCheck.java(Ctrl+S или Cmd+S).Откройте терминал в нижней части WebIDE. Убедитесь, что вы находитесь в каталоге
~/project. Если нет, введитеcd ~/projectи нажмите Enter.Скомпилируйте Java-программу, введя следующую команду и нажав Enter:
javac QueueCheck.javaЕсли компиляция прошла успешно, вы не увидите никакого вывода. Файл
QueueCheck.classбудет создан в каталоге~/project.Запустите скомпилированную Java-программу, введя следующую команду и нажав Enter:
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().
Откройте файл
QueueCheck.javaв редакторе WebIDE.Измените метод
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, как до, так и после добавления элементов. Мы также выводим конечный размер очереди.Сохраните измененный файл
QueueCheck.java.Откройте терминал и убедитесь, что вы находитесь в каталоге
~/project.Скомпилируйте обновленную Java-программу:
javac QueueCheck.javaЗапустите скомпилированную программу:
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.
Важно обрабатывать потенциальные нулевые ссылки, чтобы избежать таких ошибок. Перед вызовом методов, таких как isEmpty() или size(), для объекта Queue всегда следует проверить, не равна ли ссылка на очередь null.
Давайте еще раз модифицируем нашу программу QueueCheck.java, чтобы показать, как обрабатывать нулевую ссылку на очередь.
Откройте файл
QueueCheck.javaв редакторе WebIDE.Измените метод
main, чтобы он включал проверку на нулевую ссылку на очередь. Замените существующий метод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). Это гарантирует, что мы вызываем методы дляmyQueueтолько в том случае, если она не равнаnull. Мы также добавили раздел, демонстрирующий проверку переменной, явно установленной вnull.Сохраните измененный файл
QueueCheck.java.Откройте терминал и убедитесь, что вы находитесь в каталоге
~/project.Скомпилируйте обновленную Java-программу:
javac QueueCheck.javaЗапустите скомпилированную программу:
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. Всегда помните проверять на null при работе с ссылками на объекты в Java, особенно если они могут поступать из внешних источников или быть результатом операций, которые могут вернуть null.
Резюме
В этом практическом занятии мы узнали, как проверить, пуста ли очередь (Queue) в Java. Основное внимание уделено использованию метода isEmpty(), который является стандартным и рекомендуемым способом для такой проверки. Мы создали простую Java-программу, которая демонстрирует, что метод isEmpty() возвращает true для пустой очереди и false после добавления элементов.
Кроме того, мы рассмотрели метод size() как альтернативный способ проверки на пустоту, отметив, что размер, равный 0, указывает на пустую очередь. Наконец, мы обсудили важность обработки потенциальных ошибок NullPointerException путем проверки, не является ли объект очереди null перед попыткой вызвать на нем методы.



