Classe Stack do Java – Guia Completo de Uso e Métodos
Classe Stack do Java
Este tutorial explica a classe Stack do Java, seus métodos principais e exemplos práticos para dominar operações de pilha.
O framework de coleções do Java inclui uma classe Stack que implementa a clássica estrutura de dados pilha. Segundo a documentação oficial do Java, o Stack estende Vector, herdando todos os seus métodos enquanto adiciona operações específicas de pilha.
Implementação da Stack
Uma pilha segue o princípio Last In, First Out (LIFO - Último a Entrar, Primeiro a Sair): elementos são empilhados no topo e desempilhados do topo. O diagrama a seguir ilustra esse comportamento.
Criando uma Stack
Para criar uma pilha, importe java.util.Stack e instancie com o tipo genérico desejado:
Stack<Tipo> pilha = new Stack<>();
Exemplos:
// Pilha de inteiros
Stack<Integer> pilhaInt = new Stack<>();
// Pilha de strings
Stack<String> pilhaString = new Stack<>();
Métodos da Stack
Além dos métodos herdados do Vector, o Stack fornece cinco operações dedicadas que o distinguem de coleções genéricas. Para uma lista completa dos métodos do Vector, consulte a documentação da classe Vector.
Método push()
O método push() adiciona um elemento ao topo da pilha.
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animais = new Stack<>();
animais.push("Cachorro");
animais.push("Cavalo");
animais.push("Gato");
System.out.println("Stack: " + animais);
}
}
Saída
Stack: [Cachorro, Cavalo, Gato]
Método pop()
O método pop() remove e retorna o elemento no topo da pilha.
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animais = new Stack<>();
animais.push("Cachorro");
animais.push("Cavalo");
animais.push("Gato");
System.out.println("Stack Inicial: " + animais);
String removido = animais.pop();
System.out.println("Elemento Removido: " + removido);
}
}
Saída
Stack Inicial: [Cachorro, Cavalo, Gato] Elemento Removido: Gato
Método peek()
O método peek() recupera o elemento do topo sem removê-lo.
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animais = new Stack<>();
animais.push("Cachorro");
animais.push("Cavalo");
animais.push("Gato");
System.out.println("Stack: " + animais);
String topo = animais.peek();
System.out.println("Elemento no topo: " + topo);
}
}
Saída
Stack: [Cachorro, Cavalo, Gato] Elemento no topo: Gato
Método search()
O método search() retorna a posição baseada em 1 de um elemento a partir do topo da pilha, ou -1 se não estiver presente.
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animais = new Stack<>();
animais.push("Cachorro");
animais.push("Cavalo");
animais.push("Gato");
System.out.println("Stack: " + animais);
int pos = animais.search("Cavalo");
System.out.println("Posição do Cavalo: " + pos);
}
}
Saída
Stack: [Cachorro, Cavalo, Gato] Posição do Cavalo: 2
Método empty()
O método empty() verifica se a pilha possui elementos.
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animais = new Stack<>();
animais.push("Cachorro");
animais.push("Cavalo");
animais.push("Gato");
System.out.println("Stack: " + animais);
boolean vazia = animais.empty();
System.out.println("A pilha está vazia? " + vazia);
}
}
Saída
Stack: [Cachorro, Cavalo, Gato] A pilha está vazia? false
Use ArrayDeque em Vez de Stack
Embora o Stack implemente uma pilha, ele é considerado legado. O código Java moderno prefere ArrayDeque (implementando a interface Deque) para funcionalidade de pilha porque oferece melhor desempenho e semântica mais clara. Para mais detalhes, veja:
Java
- Entendendo a Palavra-chave final em Java: Variáveis, Métodos e Classes
- Operador instanceof em Java: Guia Completo
- Dominando Herança em Java: Conceitos, Tipos e Exemplos Práticos
- Entendendo Classes Aninhadas Estáticas em Java: Uso, Diferenças e Exemplos
- Dominando Classes Internas Anônimas em Java: Definição, Sintaxe e Exemplos Práticos
- Padrão Singleton em Java Explicado: Como Implementar e Usar com Segurança
- Dominando Reflection em Java: Inspecionando Classes, Métodos e Campos em Tempo de Execução
- Dominando Java ObjectOutputStream: Serialização, Métodos e Exemplos Práticos
- Dominando Java Generics – Construindo Código Reutilizável e Type-Safe
- Dominando Operações de Arquivo em Java com java.io – Criação, Leitura, Escrita e Exclusão