Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Java

Dominando Java ArrayDeque: Guia Completo e Implementação de Stack

Java ArrayDeque

Este guia explica a classe ArrayDeque, seus métodos e exemplos práticos — incluindo como usá-la como pilha.

No Java, ArrayDeque implementa estruturas de dados queue e deque apoiadas por um array redimensionável.

Interfaces Implementadas pelo ArrayDeque

A classe ArrayDeque implementa as seguintes interfaces:

Criando um ArrayDeque

Primeiro importe o pacote:

import java.util.ArrayDeque;

Instancie um deque tipado:

ArrayDeque<Tipo> deque = new ArrayDeque<>();

Exemplos:

// Deque de strings
ArrayDeque<String> animais = new ArrayDeque<>();
// Deque de inteiros
ArrayDeque<Integer> idades = new ArrayDeque<>();

Principais Métodos do ArrayDeque

Inserindo Elementos

1. Usando add(), addFirst(), addLast()

Nota: Se o deque estiver cheio, esses métodos lançam IllegalStateException.

ArrayDeque<String> animais = new ArrayDeque<>();
animais.add("Cachorro");
animais.addFirst("Gato");
animais.addLast("Cavalo");
System.out.println("ArrayDeque: " + animais);

Saída

ArrayDeque: [Gato, Cachorro, Cavalo]

2. Usando offer(), offerFirst(), offerLast()

Nota: Esses métodos retornam false se o deque estiver cheio.

ArrayDeque<String> animais = new ArrayDeque<>();
animais.offer("Cachorro");
animais.offerFirst("Gato");
animais.offerLast("Cavalo");
System.out.println("ArrayDeque: " + animais);

Saída

ArrayDeque: [Gato, Cachorro, Cavalo]

Acessando Elementos

1. getFirst() e getLast()

Nota: Lança NoSuchElementException se o deque estiver vazio.

ArrayDeque<String> animais = new ArrayDeque<>();
animais.add("Cachorro");
animais.add("Gato");
animais.add("Cavalo");
System.out.println("ArrayDeque: " + animais);
System.out.println("Primeiro Elemento: " + animais.getFirst());
System.out.println("Último Elemento: " + animais.getLast());

Saída

ArrayDeque: [Cachorro, Gato, Cavalo] Primeiro Elemento: Cachorro Último Elemento: Cavalo

2. peek(), peekFirst(), peekLast()

ArrayDeque<String> animais = new ArrayDeque<>();
animais.add("Cachorro");
animais.add("Gato");
animais.add("Cavalo");
System.out.println("ArrayDeque: " + animais);
System.out.println("Elemento da Cabeça: " + animais.peek());
System.out.println("Primeiro Elemento: " + animais.peekFirst());
System.out.println("Último Elemento: " + animais.peekLast());

Saída

ArrayDeque: [Cachorro, Gato, Cavalo] Elemento da Cabeça: Cachorro Primeiro Elemento: Cachorro Último Elemento: Cavalo

Nota: Se o deque estiver vazio, peek() e similares retornam null em vez de lançar exceção.

Removendo Elementos

1. remove(), removeFirst(), removeLast()

Nota: Lança NoSuchElementException se o deque estiver vazio ou se remove(o) não encontrar o.

ArrayDeque<String> animais = new ArrayDeque<>();
animais.add("Cachorro");
animais.add("Gato");
animais.add("Vaca");
animais.add("Cavalo");
System.out.println("ArrayDeque: " + animais);
System.out.println("Elemento Removido: " + animais.remove());
System.out.println("Novo ArrayDeque: " + animais);
System.out.println("Primeiro Removido: " + animais.removeFirst());
System.out.println("Último Removido: " + animais.removeLast());

Saída

ArrayDeque: [Cachorro, Gato, Vaca, Cavalo] Elemento Removido: Cachorro Novo ArrayDeque: [Gato, Vaca, Cavalo] Primeiro Removido: Gato Último Removido: Cavalo

2. poll(), pollFirst(), pollLast()

ArrayDeque<String> animais = new ArrayDeque<>();
animais.add("Cachorro");
animais.add("Gato");
animais.add("Vaca");
animais.add("Cavalo");
System.out.println("ArrayDeque: " + animais);
System.out.println("Elemento Removido: " + animais.poll());
System.out.println("Novo ArrayDeque: " + animais);
System.out.println("Primeiro Removido: " + animais.pollFirst());
System.out.println("Último Removido: " + animais.pollLast());

Saída

ArrayDeque: [Cachorro, Gato, Vaca, Cavalo] Elemento Removido: Cachorro Novo ArrayDeque: [Gato, Vaca, Cavalo] Primeiro Removido: Gato Último Removido: Cavalo

3. clear()

Esvazia o deque inteiro.

ArrayDeque<String> animais = new ArrayDeque<>();
animais.add("Cachorro");
animais.add("Gato");
animais.add("Cavalo");
System.out.println("ArrayDeque: " + animais);
animais.clear();
System.out.println("Novo ArrayDeque: " + animais);

Saída

ArrayDeque: [Cachorro, Gato, Cavalo] Novo ArrayDeque: []

Iterando sobre um ArrayDeque

ArrayDeque<String> animais = new ArrayDeque<>();
animais.add("Cachorro");
animais.add("Gato");
animais.add("Cavalo");
System.out.print("ArrayDeque: ");
Iterator<String> it = animais.iterator();
while(it.hasNext()) {
    System.out.print(it.next() + ", ");
}
System.out.print("\nArrayDeque em ordem reversa: ");
Iterator<String> rev = animais.descendingIterator();
while(rev.hasNext()) {
    System.out.print(rev.next() + ", ");
}

Saída

ArrayDeque: [Cachorro, Gato, Cavalo] ArrayDeque em ordem reversa: [Cavalo, Gato, Cachorro]

Outros Métodos Comuns

Método Descrição
element() Recupera mas não remove a cabeça.
contains(Object o) Verifica a presença de o; retorna true se encontrado.
size() Número de elementos no deque.
toArray() Converte o deque para um array.
clone() Cria uma cópia rasa do deque.

Usando ArrayDeque como Pilha (Stack)

Para comportamento LIFO, ArrayDeque é preferível sobre Stack devido a melhor desempenho e sem sobrecarga de sincronização legada.

Métodos estilo pilha:

ArrayDeque<String> pilha = new ArrayDeque<>();
pilha.push("Cachorro");
pilha.push("Gato");
pilha.push("Cavalo");
System.out.println("Stack: " + pilha);
System.out.println("Elemento Acessado: " + pilha.peek());
System.out.println("Elemento Removido: " + pilha.pop());

Saída

Stack: [Cavalo, Gato, Cachorro] Elemento Acessado: Cavalo Elemento Removido: Cavalo

ArrayDeque vs LinkedList

Ambos implementam Deque, mas diferem:

Java

  1. Dominando Operadores Java: Tipos, Sintaxe e Exemplos Práticos
  2. Comentários em Java: Tipos, Uso e Boas Práticas
  3. Dominando o Loop for Aprimorado em Java: Sintaxe, Exemplos e Boas Práticas
  4. Dominando Strings em Java: Criação, Métodos e Boas Práticas
  5. Dominando Interfaces em Java: Conceitos, Implementação e Boas Práticas
  6. Dominando Classes Internas Anônimas em Java: Definição, Sintaxe e Exemplos Práticos
  7. Dominando Try-With-Resources em Java: Gerenciamento Automático de Recursos Explicado
  8. Anotações em Java Explicadas: Tipos, Posicionamento e Exemplos Práticos
  9. Asserções em Java: Guia Prático para Detectar Bugs e Garantir Confiabilidade do Código
  10. Entendendo o Java Vector: Uso, Recursos e Comparação com ArrayList