Como Verificar se uma Fila Está Vazia em Java

JavaBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como verificar se uma Queue em Java está vazia. Esta é uma habilidade crucial para prevenir erros ao trabalhar com filas.

Exploraremos o método principal para essa verificação, isEmpty(), e também veremos como verificar o estado da fila usando o método size(). Além disso, abordaremos como lidar com cenários em que a fila pode ser nula. Através de exemplos práticos, você obterá experiência prática em determinar o vazio de uma fila Java.

Use isEmpty() para Verificação da Fila

Nesta etapa, exploraremos como verificar se uma Queue em Java está vazia usando o método isEmpty(). Esta é uma operação fundamental ao trabalhar com coleções, pois nos permite evitar erros que podem ocorrer ao tentar acessar elementos de uma fila vazia.

Primeiramente, vamos criar um programa Java simples que demonstra o uso de isEmpty().

  1. Abra o WebIDE e navegue até o diretório ~/project no File Explorer à esquerda.

  2. Clique com o botão direito no espaço vazio no File Explorer, selecione "New File" e nomeie-o como QueueCheck.java.

  3. Abra o arquivo QueueCheck.java no editor.

  4. Copie e cole o seguinte código no editor:

    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);
        }
    }

    Vamos rapidamente analisar as novas partes deste código:

    • import java.util.LinkedList; e import java.util.Queue;: Estas linhas importam as classes necessárias para trabalhar com Filas. Estamos usando LinkedList como uma implementação concreta da interface Queue.
    • Queue<String> myQueue = new LinkedList<>();: Esta linha cria um novo objeto Queue chamado myQueue que pode conter elementos String.
    • myQueue.isEmpty(): Este é o método em que estamos focando. Ele retorna true se a fila não contiver elementos e false caso contrário.
    • myQueue.add("Element 1");: Isso adiciona um elemento ao final da fila.
  5. Salve o arquivo QueueCheck.java (Ctrl+S ou Cmd+S).

  6. Abra o Terminal na parte inferior do WebIDE. Certifique-se de estar no diretório ~/project. Caso contrário, digite cd ~/project e pressione Enter.

  7. Compile o programa Java digitando o seguinte comando e pressionando Enter:

    javac QueueCheck.java

    Se a compilação for bem-sucedida, você não verá nenhuma saída. Um arquivo QueueCheck.class será criado no diretório ~/project.

  8. Execute o programa Java compilado digitando o seguinte comando e pressionando Enter:

    java QueueCheck

    Você deve ver uma saída semelhante a esta:

    Is the queue empty before adding elements? true
    Is the queue empty after adding elements? false

Esta saída confirma que o método isEmpty() relatou corretamente o estado da fila antes e depois de adicionar elementos. Usar isEmpty() é a maneira recomendada de verificar se uma coleção está vazia, pois geralmente é mais eficiente do que verificar se o tamanho é zero, especialmente para certas implementações de coleção.

Verificar com o Método size()

Na etapa anterior, aprendemos como usar o método isEmpty() para verificar se uma fila está vazia. Outra maneira de determinar se uma coleção está vazia é verificando seu tamanho. O método size() retorna o número de elementos na coleção. Se o tamanho for 0, a coleção está vazia.

Embora isEmpty() seja geralmente preferido para verificar o vazio devido aos potenciais benefícios de desempenho com certos tipos de coleção, entender como usar size() também é importante.

Vamos modificar nosso programa QueueCheck.java para também usar o método size().

  1. Abra o arquivo QueueCheck.java no editor WebIDE.

  2. Modifique o método main para incluir verificações usando o método size(). Substitua o método main existente pelo seguinte código:

    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());
        }
    }

    Neste código atualizado, adicionamos linhas para verificar se o size() da fila é igual a 0 antes e depois de adicionar elementos. Também imprimimos o tamanho final da fila.

  3. Salve o arquivo QueueCheck.java modificado.

  4. Abra o Terminal e certifique-se de estar no diretório ~/project.

  5. Compile o programa Java atualizado:

    javac QueueCheck.java
  6. Execute o programa compilado:

    java QueueCheck

    Você deve ver uma saída semelhante a esta:

    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

Como você pode ver, tanto isEmpty() quanto verificar se size() == 0 dão o mesmo resultado para determinar se a fila está vazia. O método size() também é útil para saber exatamente quantos elementos estão atualmente na fila.

Lidar com Filas Nulas

Nas etapas anteriores, trabalhamos com um objeto Queue que foi devidamente inicializado. No entanto, na programação do mundo real, é possível encontrar situações em que uma referência a uma Queue (ou qualquer objeto) é null. Tentar chamar um método em um objeto null resultará em um NullPointerException, que é um erro de tempo de execução comum em Java.

É crucial lidar com referências null potenciais para evitar esses erros. Antes de chamar métodos como isEmpty() ou size() em uma Queue, você sempre deve verificar se a própria referência da fila é null.

Vamos modificar nosso programa QueueCheck.java mais uma vez para demonstrar como lidar com uma fila null.

  1. Abra o arquivo QueueCheck.java no editor WebIDE.

  2. Modifique o método main para incluir uma verificação para uma fila null. Substitua o método main existente pelo seguinte código:

    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.");
            }
        }
    }

    Envolvemos o código original que opera em myQueue dentro de um bloco if (myQueue != null). Isso garante que chamemos métodos em myQueue somente se ele não for null. Também adicionamos uma seção para demonstrar a verificação de uma variável explicitamente definida como null.

  3. Salve o arquivo QueueCheck.java modificado.

  4. Abra o Terminal e certifique-se de estar no diretório ~/project.

  5. Compile o programa Java atualizado:

    javac QueueCheck.java
  6. Execute o programa compilado:

    java QueueCheck

    Você deve ver uma saída semelhante a esta:

    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.

Esta saída mostra que nosso código lida corretamente com o caso em que a fila é inicializada e o caso em que a referência da fila é null, evitando um NullPointerException. Lembre-se sempre de verificar se há null ao lidar com referências de objetos em Java, especialmente quando elas podem vir de fontes externas ou ser o resultado de operações que podem retornar null.

Resumo

Neste laboratório, aprendemos como verificar se uma Queue em Java está vazia. Nos concentramos principalmente no uso do método isEmpty(), que é a maneira padrão e recomendada de realizar essa verificação. Criamos um programa Java simples para demonstrar como isEmpty() retorna true para uma fila vazia e false após a adição de elementos.

Além disso, exploramos o método size() como uma forma alternativa de verificar o vazio, observando que um tamanho de 0 indica uma fila vazia. Por fim, discutimos a importância de lidar com potenciais NullPointerException verificando se um objeto de fila é nulo antes de tentar chamar métodos nele.