Clase Stack de Java: Guía Completa de Uso y Métodos
Clase Stack de Java
Este tutorial explica la clase Stack de Java, sus métodos principales y ejemplos prácticos para dominar las operaciones de pila.
El framework de colecciones de Java incluye una clase Stack que implementa la clásica estructura de datos pila. Según la documentación oficial de Java, Stack extiende Vector, heredando todos sus métodos mientras añade operaciones específicas de pila.
Implementación de Stack
Una pila sigue el principio Último en Entrar, Primero en Salir (LIFO): los elementos se apilan (push) en la cima y se desapilan (pop) desde la cima. El siguiente diagrama ilustra este comportamiento.

Creando una Pila (Stack)
Para crear una pila, importa java.util.Stack e instánciala con el tipo genérico deseado:
Stack<Tipo> pila = new Stack<>();
Ejemplos:
// Pila de enteros
Stack<Integer> pilaEnteros = new Stack<>();
// Pila de cadenas
Stack<String> pilaCadenas = new Stack<>();
Métodos de Stack
Más allá de los métodos heredados de Vector, Stack proporciona cinco operaciones dedicadas que la distinguen de las colecciones genéricas. Para una lista completa de métodos de Vector, consulta la documentación de la clase Vector.
Método push()
El método push() añade un elemento en la cima de la pila.
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animales = new Stack<>();
animales.push("Perro");
animales.push("Caballo");
animales.push("Gato");
System.out.println("Pila: " + animales);
}
}
Salida
Pila: [Perro, Caballo, Gato]
Método pop()
El método pop() elimina y devuelve el elemento en la cima de la pila.
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animales = new Stack<>();
animales.push("Perro");
animales.push("Caballo");
animales.push("Gato");
System.out.println("Pila Inicial: " + animales);
String eliminado = animales.pop();
System.out.println("Elemento Eliminado: " + eliminado);
}
}
Salida
Pila Inicial: [Perro, Caballo, Gato] Elemento Eliminado: Gato
Método peek()
El método peek() recupera el elemento superior sin eliminarlo.
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animales = new Stack<>();
animales.push("Perro");
animales.push("Caballo");
animales.push("Gato");
System.out.println("Pila: " + animales);
String cima = animales.peek();
System.out.println("Elemento en la cima: " + cima);
}
}
Salida
Pila: [Perro, Caballo, Gato] Elemento en la cima: Gato
Método search()
El método search() devuelve la posición basada en 1 de un elemento desde la cima de la pila, o -1 si no está presente.
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animales = new Stack<>();
animales.push("Perro");
animales.push("Caballo");
animales.push("Gato");
System.out.println("Pila: " + animales);
int pos = animales.search("Caballo");
System.out.println("Posición de Caballo: " + pos);
}
}
Salida
Pila: [Perro, Caballo, Gato] Posición de Caballo: 2
Método empty()
El método empty() verifica si la pila tiene algún elemento.
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animales = new Stack<>();
animales.push("Perro");
animales.push("Caballo");
animales.push("Gato");
System.out.println("Pila: " + animales);
boolean estaVacia = animales.empty();
System.out.println("¿Está vacía la pila? " + estaVacia);
}
}
Salida
Pila: [Perro, Caballo, Gato] ¿Está vacía la pila? false
Usa ArrayDeque en Lugar de Stack
Aunque Stack implementa una pila, se considera heredado (legacy). El código Java moderno prefiere ArrayDeque (que implementa la interfaz Deque) para funcionalidad de pila porque ofrece mejor rendimiento y semántica más clara. Para más detalles, consulta:
Java
- Palabra clave final en Java: Variables, métodos y clases
- Operador instanceof en Java: Guía completa
- Dominando la herencia en Java: Conceptos, tipos y ejemplos prácticos
- Entendiendo las clases anidadas estáticas en Java: Uso, diferencias y ejemplos
- Dominando las clases internas anónimas en Java: Definición, sintaxis y ejemplos prácticos
- Patrón Singleton en Java explicado: Cómo implementarlo y usarlo de forma segura
- Dominando la Reflexión en Java: Inspeccionando clases, métodos y campos en tiempo de ejecución
- Dominando ArrayList en Java: Operaciones, métodos y mejores prácticas
- Dominando ObjectOutputStream de Java: Serialización, Métodos y Ejemplos Prácticos
- Dominando Java Generics: Construyendo Código Reutilizable y Type-Safe
- Dominando las operaciones de archivos en Java con java.io: creación, lectura, escritura y eliminación