0

O que é Queue?

#Java
Gabriel Machado
Gabriel Machado

Muito utilizada para implementação de filas. O conceito de fila diz basicamente que o primeiro elemento a ser inserido na estrutura de dados deve ser o primeiro a sair.


java.util.Queue

Implementações que aprenderemos

  • java.util.LinkedList

Garante ordem de inserção.

Permite adição, leitura e remoção considerando a regra básica de uma fila: Primeiro que entra, primeiro que sai (FIFO).

Não permite mudança de ordenação.


Conseguimos criar uma Queue da seguinte forma:

import java.util.LinkedList;
import java.util.Queue;

public class ExampleLinkedList {
    public static void main(String[] args) {
        Queue<String> bankQueue = new LinkedList<>();

        bankQueue.add("Patrícia");
        bankQueue.add("Roberto");
        bankQueue.add("Flávio");
        bankQueue.add("Pamela");
        bankQueue.add("Anderson");

        System.out.println(bankQueue); // [Patrícia, Roberto, Flávio, Pamela, Anderson]
    }
}


Para retornar o primeiro elemento da fila e o remover usamos o método .poll():

String clientToBeAttended = bankQueue.poll();

System.out.println(clientToBeAttended); // Patrícia

System.out.println(bankQueue); // [Roberto, Flávio, Pamela, Anderson]

Caso a fila esteja vazia o método retorna null.


A função .peek() retorna o primeiro elemento da fila, sem remove-lo:

String firstClient = bankQueue.peek();

System.out.println(firstClient); // Roberto

System.out.println(bankQueue); // [Roberto, Flávio, Pamela, Anderson]

Caso a fila esteja vazia o método retorna null.


Um método bem parecido com o anterior é o .element(), que também retorna o primeiro elemento da fila sem remove-lo mas com a diferença de que caso a fila esteja vazia ele retornará uma exceção do tipo NoSuchElementException:

String firstClientOrException = bankQueue.element();

System.out.println(firstClient); // Roberto

System.out.println(bankQueue); // [Roberto, Flávio, Pamela, Anderson]


Assim como nas Listas, podemos utilizar de estruturas de repetição para navegar pelas Filas:

for (String client: bankQueue) {
    System.out.println("--> " + client);
}

Iterator<String> iteratorBankQueue = bankQueue.iterator();

while (iteratorBankQueue.hasNext()) {
    System.out.println("---> " + iteratorBankQueue.next());
}


Novamente vemos algumas semelhanças de métodos entre Filas e Listas como o .size() (retorna o tamanho da fila) e o .isEmpty() (verifica se a fila está vazia retornando true ou false).

System.out.println(bankQueue.size()); // 4

System.out.println(bankQueue.isEmpty()); // false


Por fim podemos utilizar o método .clear() para limpar a fila, removendo todos os seus elementos:

bankQueue.clear();

System.out.println(bankQueue.isEmpty()); // true

System.out.println(bankQueue.poll()); // null

System.out.println(bankQueue.peek()); // null

bankQueue.element(); // Exception in thread "main" java.util.NoSuchElementException


Obs.: Caso você tente utilizar o método de ordenação de Collections.sort() ocorrerá um erro de compilação, pois a fila não permite alteração na sua ordem.


Esse artigo foi baseado na aula "Implementando Collections e Streams com Java: Collections II - Queue: O que é Queue?" e nela foi passado um exercício, deixo aqui para quem teve dúvidas ou queira conferir-lo:

import java.util.LinkedList;
import java.util.Queue;

public class ExerciseLinkedList {
    public static void main(String[] args) {
        Queue<String> namesQueue = new LinkedList<>();

        namesQueue.add("Juliana");
        namesQueue.add("Pedro");
        namesQueue.add("Carlos");
        namesQueue.add("Larissa");
        namesQueue.add("João");

        for (String name: namesQueue) {
            System.out.println(name);
        }

        System.out.println("First item of queue: " + namesQueue.peek());

        System.out.println("Removed item of queue: " + namesQueue.poll());

        namesQueue.add("Daniel");

        System.out.println("Queue after added Daniel: " + namesQueue);

        System.out.println("Queue size: " + namesQueue.size());

        System.out.println("Is queue empty? " + namesQueue.isEmpty());

        System.out.println("Carlos is in the queue? " + namesQueue.contains("Carlos"));
    }
}
0
1

Comentários (1)

20 anos / Desenvolvedor na Seidor Brasil

Brasil