🧱 ArrayDeque

✅ 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 Stack e LinkedList.

📚 Principais métodos

MétodoAçã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 vazio
  • poll() retorna null se estiver vazio

🧠 Dicas para a prova

  • Se uma questão fala de comportamento de pilha, procure uso de push() e pop().
  • Se a questão envolve acesso em ambas pontas, pense em ArrayDeque.
  • Nunca use null com ArrayDeque.
  • Prefira offer* e poll* se quiser evitar exceções com estrutura vazia.

📝 Simulado

1) Qual a saída do código abaixo?

bpush("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)?

cArrayDeque não aceita null

a) Insere null
b) Nada
c) NullPointerException
d) IllegalArgumentException

3) Qual método remove o último elemento da fila?

cremoveLast() remove o último

a) pop()
b) removeFirst()
c) removeLast()
d) peekLast()

4) Considerando deque vazio, qual método NÃO lança exceção?

dpollFirst() retorna null, os outros lançam exceção

a) removeFirst()
b) removeLast()
c) pop()
d) pollFirst()

5) O que representa deque.offerLast("Z")?

cofferLast() 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?

apush() 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?

cofferFirst(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?

bpeekFirst() 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?

dArrayDeque é 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 LinkedList para a maioria dos usos.
  • Perfeita para simular estruturas como pilhas, filas e deques com bom desempenho.