Как проверить, пуста ли очередь в Java

JavaJavaBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь проверять, пуста ли очередь (Queue) в Java. Это важный навык для предотвращения ошибок при работе с очередями.

Мы рассмотрим основной метод для такой проверки, isEmpty(), а также увидим, как проверить состояние очереди с использованием метода size(). Кроме того, мы обсудим, как обрабатывать ситуации, когда очередь может быть равна null. С помощью практических примеров вы получите практический опыт определения пустоты очереди в Java.


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/BasicSyntaxGroup -.-> java/if_else("If...Else") java/DataStructuresGroup -.-> java/collections_methods("Collections Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/exceptions("Exceptions") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/linkedlist("LinkedList") subgraph Lab Skills java/if_else -.-> lab-559972{{"Как проверить, пуста ли очередь в Java"}} java/collections_methods -.-> lab-559972{{"Как проверить, пуста ли очередь в Java"}} java/exceptions -.-> lab-559972{{"Как проверить, пуста ли очередь в Java"}} java/linkedlist -.-> lab-559972{{"Как проверить, пуста ли очередь в Java"}} end

Использование метода isEmpty() для проверки очереди

На этом этапе мы рассмотрим, как проверить, пуста ли очередь (Queue) в Java с использованием метода isEmpty(). Это фундаментальная операция при работе с коллекциями, так как позволяет избежать ошибок, которые могут возникнуть при попытке доступа к элементам пустой очереди.

Сначала создадим простую Java-программу, которая демонстрирует использование метода isEmpty().

  1. Откройте WebIDE и перейдите в каталог ~/project в проводнике файлов слева.

  2. Щелкните правой кнопкой мыши в пустом пространстве проводника файлов, выберите "Новый файл" и назовите его QueueCheck.java.

  3. Откройте файл QueueCheck.java в редакторе.

  4. Скопируйте и вставьте следующий код в редактор:

    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");: Эта строка добавляет элемент в конец очереди.
  5. Сохраните файл QueueCheck.java (Ctrl+S или Cmd+S).

  6. Откройте терминал в нижней части WebIDE. Убедитесь, что вы находитесь в каталоге ~/project. Если нет, введите cd ~/project и нажмите Enter.

  7. Скомпилируйте Java-программу, введя следующую команду и нажав Enter:

    javac QueueCheck.java

    Если компиляция прошла успешно, вы не увидите никакого вывода. Файл QueueCheck.class будет создан в каталоге ~/project.

  8. Запустите скомпилированную 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().

  1. Откройте файл QueueCheck.java в редакторе WebIDE.

  2. Измените метод 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, как до, так и после добавления элементов. Мы также выводим конечный размер очереди.

  3. Сохраните измененный файл QueueCheck.java.

  4. Откройте терминал и убедитесь, что вы находитесь в каталоге ~/project.

  5. Скомпилируйте обновленную Java-программу:

    javac QueueCheck.java
  6. Запустите скомпилированную программу:

    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, чтобы показать, как обрабатывать нулевую ссылку на очередь.

  1. Откройте файл QueueCheck.java в редакторе WebIDE.

  2. Измените метод 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.

  3. Сохраните измененный файл QueueCheck.java.

  4. Откройте терминал и убедитесь, что вы находитесь в каталоге ~/project.

  5. Скомпилируйте обновленную Java-программу:

    javac QueueCheck.java
  6. Запустите скомпилированную программу:

    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 перед попыткой вызвать на нем методы.