La clase Stack en Java
La clase Stack de Java está incluida en la Java Collections Framework (JCF). Para utilizarla solo debemos importar el siguiente paquete:
import java.util.Stack;
En este paquete la clase Stack hereda de la clase Vector que, a su vez, implementa la interfaz List. En este artículo no nos centraremos en cómo ha sido desarrollada si no en cómo usarla. Para lograrlo, debemos conocer sus métodos.
DATO: Los mismos desarrolladores de Java desaconsejan usar la clase Stack. Para poder manejar datos con una estructura LIFO te recomiendan los métodos que ofrecen las implementaciones de la interfaz Deque. Estos son más eficientes.
Métodos de la clase Stack en Java y constructor
Veamos que nos ofrece esta clase:
- Constructor: crea una pila vacía.
Stack<Integer> stack = new Stack();
- boolean empty(): devuelve True si la pila está vacía, False en caso contrario.
if (pila.empty()) { System.out.println("La pila esta vacia"); } else { System.out.println("La pila NO esta vacia"); }
- E peek(): devuelve el elemento del top de la pila. En caso de que no contenga ningún elemento, lanza una EmptyStackException.
try { var top = pila.peek(); } catch (EmptyStackException e) { System.out.println("No puedes hacer peek en una pila vacia"); }
- E pop(): elimina y devuelve el elemento del top de la pila. En caso de que esté vacía, lanza una EmptyStackException.
try { int eliminado = pila.pop(); System.out.println("Se ha eliminado el elemento: " + eliminado); } catch (EmptyStackException e) { System.out.println("No puedes hacer pop en una pila vacia"); }
- E push(E item): inserta el item pasado como parámetro en el top de la pila y lo devuelve.
int item = pila.push(2); System.out.println("Se ha añadido el elemento: " + item);
- int search(Object o): devuelve la posición de la pila en la que está el objeto «o». Si no está en la pila, la función retorna -1. Es importante saber que para conocer la posición en la que está el objeto se empieza a contar des del top del Stack, considerado como la posición 1.
int posicion = pila.search(2); System.out.println("Posición a partir del top (1): " + posicion);
Ejemplo Stack
En esta sección te ofrezco un pequeño programa de prueba que crea una pila vacía, muestra como se van apilando los números del 1 al 10 y, finalmente, muestra como se van desapilando hasta que el Stack queda sin elementos. ¡Te animo a que lo ejecutes para acabar de dominar los métodos de esta clase!
import java.util.Stack; public class Main { public static void main(String[] args) { var numStack = new Stack<Integer>(); // apilar for (int i = 1; i < 11; i++) { numStack.push(i); System.out.println("Apilando elemento: " + i + " / pila -> " + numStack); } System.out.println(); // desapilar while (!numStack.empty()) { numStack.pop(); System.out.println("Desapilando elemento" + " / pila -> " + numStack); } } }