Dominando a Interface Queue do Java: Métodos, Implementações e Uso Prático
Dominando a Interface Queue do Java
Descubra como a interface Queue do Java potencializa estruturas de dados FIFO, seus métodos principais e as classes de implementação mais comuns.
Classes que Implementam Queue
Como Queue é uma interface, você trabalhará com classes concretas que fornecem a funcionalidade real. As três implementações mais amplamente usadas são:
ArrayDeque– uma fila de duas pontas redimensionável com operações rápidas de adição/remoção.LinkedList– uma lista duplamente encadeada que suporta operações de queue e deque.PriorityQueue– uma fila baseada em heap que ordena elementos por ordem natural ou um comparador fornecido.
Subinterfaces que Estendem Queue
A interface Queue é estendida por várias subinterfaces que adicionam capacidades de bloqueio ou de duas pontas:
Deque– adiciona operações push/pop em ambas as extremidades.BlockingQueue– introduz enfileiramento/desenfileiramento thread-safe com timeouts opcionais.BlockingDeque– combina bloqueio com semântica de duas pontas.
Estrutura de Dados Queue em Ação
As filas operam no princípio First-In, First-Out (FIFO) (Primeiro a Entrar, Primeiro a Sair): elementos são adicionados ao final e removidos do início.
Como Usar Queue no Java
Importe a interface com java.util.Queue e instancie via uma classe concreta:
import java.util.Queue;
import java.util.LinkedList;
import java.util.ArrayDeque;
import java.util.PriorityQueue;
Queue<String> animal1 = new LinkedList<>();
Queue<String> animal2 = new ArrayDeque<>();
Queue<String> animal3 = new PriorityQueue<>();
Cada objeto herda o conjunto completo de métodos Queue e a API genérica Collection.
Métodos Principais da Queue
A interface estende Collection, então inclui todos os seus métodos. As operações específicas de fila mais usadas são:
- add(E e) – insere o elemento; lança exceção em caso de falha.
- offer(E e) – insere o elemento; retorna
falseem caso de falha sem lançar exceção. - element() – recupera, sem remover, o cabeça; lança exceção se vazia.
- peek() – recupera, sem remover, o cabeça; retorna
nullse vazia. - remove() – remove e retorna o cabeça; lança exceção se vazia.
- poll() – remove e retorna o cabeça; retorna
nullse vazia.
Exemplo de Implementação com LinkedList
import java.util.Queue;
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
Queue<Integer> numeros = new LinkedList<>();
numeros.offer(1);
numeros.offer(2);
numeros.offer(3);
System.out.println("Queue: " + numeros);
int acessado = numeros.peek();
System.out.println("Elemento Acessado: " + acessado);
int removido = numeros.poll();
System.out.println("Elemento Removido: " + removido);
System.out.println("Queue Atualizada: " + numeros);
}
}
Saída
Queue: [1, 2, 3] Elemento Acessado: 1 Elemento Removido: 1 Queue Atualizada: [2, 3]
Para insights mais profundos, veja Java LinkedList.
Exemplo de Implementação com PriorityQueue
import java.util.Queue;
import java.util.PriorityQueue;
public class Main {
public static void main(String[] args) {
Queue<Integer> numeros = new PriorityQueue<>();
numeros.offer(5);
numeros.offer(1);
numeros.offer(2);
System.out.println("Queue: " + numeros);
int acessado = numeros.peek();
System.out.println("Elemento Acessado: " + acessado);
int removido = numeros.poll();
System.out.println("Elemento Removido: " + removido);
System.out.println("Queue Atualizada: " + numeros);
}
}
Saída
Queue: [1, 5, 2] Elemento Acessado: 1 Elemento Removido: 1 Queue Atualizada: [2, 5]
Para insights mais profundos, veja Java PriorityQueue.
Fique atento para nossos próximos tutoriais que explorarão as subinterfaces da Queue — Deque, BlockingQueue e BlockingDeque — e como usá-las em cenários do mundo real.
Java
- Dominando Interfaces em C#: Definição, Implementação e Casos Práticos
- Dominando Operadores Java: Tipos, Sintaxe e Exemplos Práticos
- Dominando a Palavra-chave super em Java: Uso Avançado e Exemplos Práticos
- Dominando Interfaces em Java: Conceitos, Implementação e Boas Práticas
- Dominando Try-With-Resources em Java: Gerenciamento Automático de Recursos Explicado
- Anotações em Java Explicadas: Tipos, Posicionamento e Exemplos Práticos
- Dominando a Interface NavigableSet do Java: Navegação, Ordenação e Exemplos Práticos
- Dominando Expressões Lambda em Java: Do Básico à Stream API
- Entendendo Interfaces em Java: Definições, Usos e Boas Práticas
- Java 9 Métodos Privados em Interfaces: Aumentando Encapsulamento e Reuso de Código