✅ O que é?
ArrayDeque (double-ended queue) é uma fila de duas pontas baseada em array que permite adicionar e remover elementos tanto no início quanto no fim, com ótima performance (mais rápido que LinkedList em geral).
🧪 Características principais:
- Não permite elementos
null. - Não é thread-safe.
- Pode ser usada como pilha (stack) ou fila (queue).
- Mais eficiente que
StackeLinkedList.
📚 Principais métodos
| Método | Ação |
|---|---|
addFirst(E e) | Adiciona no início da fila |
addLast(E e) | Adiciona no fim da fila |
removeFirst() | Remove e retorna o primeiro elemento |
removeLast() | Remove e retorna o último elemento |
peekFirst() | Retorna (sem remover) o primeiro elemento |
peekLast() | Retorna (sem remover) o último elemento |
push(E e) | Adiciona no início (modo pilha) |
pop() | Remove do início (modo pilha) |
offerFirst(E e) | Adiciona no início (retorna boolean) |
offerLast(E e) | Adiciona no fim (retorna boolean) |
pollFirst() | Remove do início (retorna null se vazio) |
pollLast() | Remove do fim (retorna null se vazio) |
✅ Exemplo completo
import java.util.ArrayDeque;
public class TesteDeque {
public static void main(String[] args) {
ArrayDeque<String> deque = new ArrayDeque<>();
deque.add("A");
deque.addFirst("B");
deque.addLast("C");
deque.push("D");
System.out.println(deque); // [D, B, A, C]
System.out.println(deque.peekFirst()); // D
System.out.println(deque.peekLast()); // C
System.out.println(deque.pop()); // D
System.out.println(deque.removeLast()); // C
System.out.println(deque.pollFirst()); // B
System.out.println(deque); // [A]
}
}
⚠️ Erros comuns (e pegadinhas de prova)
Adicionar null → lança NullPointerException
// ❌ Erro em tempo de execução
deque.add(null);
Confundir push() com add()
push()= adiciona no início (modo pilha)add()= adiciona no fim
remove() vs poll()
remove()lança exceção se estiver vaziopoll()retornanullse estiver vazio
🧠 Dicas para a prova
- Se uma questão fala de comportamento de pilha, procure uso de
push()epop(). - Se a questão envolve acesso em ambas pontas, pense em
ArrayDeque. - Nunca use
nullcomArrayDeque. - Prefira
offer*epoll*se quiser evitar exceções com estrutura vazia.
📝 Simulado
1) Qual a saída do código abaixo?
b — push("B") depois push("A"), então o topo é B
ArrayDeque<String> deque = new ArrayDeque<>();
deque.push("A");
deque.push("B");
System.out.println(deque.pop());
a) A
b) B
c) null
d) Exceção
2) O que acontece ao executar deque.add(null)?
c — ArrayDeque não aceita null
a) Insere null
b) Nada
c) NullPointerException
d) IllegalArgumentException
3) Qual método remove o último elemento da fila?
c — removeLast() remove o último
a) pop()
b) removeFirst()
c) removeLast()
d) peekLast()
4) Considerando deque vazio, qual método NÃO lança exceção?
d — pollFirst() retorna null, os outros lançam exceção
a) removeFirst()
b) removeLast()
c) pop()
d) pollFirst()
5) O que representa deque.offerLast("Z")?
c — offerLast() adiciona no fim
a) Remove o último
b) Adiciona no início
c) Adiciona no fim
d) Verifica se o último é “Z”
6) Qual das opções representa o uso de ArrayDeque como uma pilha?
a — push() e pop() são equivalentes a pilha
a) push + pop
b) add + remove
c) offer + poll
d) addFirst + removeLast
7) Qual será a saída?
c — offerFirst(0) coloca o 0 na frente → [0, 1, 2]
ArrayDeque<Integer> d = new ArrayDeque<>();
d.offer(1);
d.offer(2);
d.offerFirst(0);
System.out.println(d);
a) [1, 2, 0]
b) [2, 1, 0]
c) [0, 1, 2]
d) [0, 2, 1]
8) O que peekFirst() faz?
b — peekFirst() retorna o primeiro sem remover
a) Remove o primeiro
b) Retorna o primeiro (sem remover)
c) Retorna o último
d) Adiciona no início
9) ArrayDeque permite elementos null?
b — Não aceita null
a) Sim
b) Não
10) Qual dessas estruturas oferece melhor performance para fila que LinkedList?
d — ArrayDeque é mais eficiente que LinkedList como fila
a) Vector
b) TreeSet
c) HashMap
d) ArrayDeque
📌 Resumo
ArrayDequeé uma fila de duas pontas.- Pode ser usada como fila ou pilha.
- Não aceita elementos
null. - Possui métodos como
addFirst(),addLast(),push(),pop(),peek(),poll(). - Mais performática que
LinkedListpara a maioria dos usos. - Perfeita para simular estruturas como pilhas, filas e deques com bom desempenho.