Clase de pila en Java

 

El marco de Java Collection proporciona una clase Stack que modela e implementa una estructura de datos Stack . La clase se basa en el principio básico de último en entrar, primero en salir. Además de las operaciones básicas de inserción y extracción, la clase proporciona tres funciones más de vaciar, buscar y mirar. También se puede decir que la clase extiende Vector y trata a la clase como una pila con las cinco funciones mencionadas. La clase también puede denominarse subclase de Vector.

El siguiente diagrama muestra la jerarquía de la clase Stack

 

 

Stack Class in Java

La clase admite un constructor predeterminado Stack() que se usa para crear una pila vacía

Declaración:

public class Stack<E> extends Vector<E>

Todas las interfaces implementadas:

  • Serializable: es una interfaz de marcador que las clases deben implementar si se van a serializar y deserializar.
  • Clonable: Esta es una interfaz en Java que necesita ser implementada por una clase para permitir que sus objetos sean clonados.
  • Iterable<E>: esta interfaz representa una colección de objetos iterables, lo que significa que se pueden iterar.
  • Collection<E>: una colección representa un grupo de objetos conocidos como sus elementos. La interfaz Collection se utiliza para pasar colecciones de objetos donde se desea la máxima generalidad.
  • List<E>: la interfaz List proporciona una forma de almacenar la colección ordenada. Es una interfaz secundaria de Collection.
  • RandomAccess: esta es una interfaz de marcador utilizada por las implementaciones de List para indicar que admiten acceso aleatorio rápido (generalmente en tiempo constante).

¿Cómo crear una pila?

Para crear una pila, debemos importar el paquete java.util.stack y usar el constructor Stack() de esta clase. El siguiente ejemplo crea una pila vacía.

Pila<E> pila = nueva Pila<E>();

Aquí E es el tipo de Objeto.

Ejemplo: 

Java

// Java code for stack implementation
  
import java.io.*;
import java.util.*;
  
class Test
{   
    // Pushing element on the top of the stack
    static void stack_push(Stack<Integer> stack)
    {
        for(int i = 0; i < 5; i++)
        {
            stack.push(i);
        }
    }
      
    // Popping element from the top of the stack
    static void stack_pop(Stack<Integer> stack)
    {
        System.out.println("Pop Operation:");
  
        for(int i = 0; i < 5; i++)
        {
            Integer y = (Integer) stack.pop();
            System.out.println(y);
        }
    }
  
    // Displaying element on the top of the stack
    static void stack_peek(Stack<Integer> stack)
    {
        Integer element = (Integer) stack.peek();
        System.out.println("Element on stack top: " + element);
    }
      
    // Searching element in the stack
    static void stack_search(Stack<Integer> stack, int element)
    {
        Integer pos = (Integer) stack.search(element);
  
        if(pos == -1)
            System.out.println("Element not found");
        else
            System.out.println("Element is found at position: " + pos);
    }
  
  
    public static void main (String[] args)
    {
        Stack<Integer> stack = new Stack<Integer>();
  
        stack_push(stack);
        stack_pop(stack);
        stack_push(stack);
        stack_peek(stack);
        stack_search(stack, 2);
        stack_search(stack, 6);
    }
}

Producción:

Pop Operation:
4
3
2
1
0
Element on stack top: 4
Element is found at position: 3
Element not found

Realización de varias operaciones en la clase Stack

1. Agregar elementos: para agregar un elemento a la pila, podemos usar el método push() . Esta operación push() coloca el elemento en la parte superior de la pila.

java-collection-framework-fundamentals-self-paced

Java

// Java program to add the
// elements in the stack
import java.io.*;
import java.util.*;
  
class StackDemo {
    
      // Main Method
    public static void main(String[] args)
    {
  
        // Default initialization of Stack
        Stack stack1 = new Stack();
  
        // Initialization of Stack
        // using Generics
        Stack<String> stack2 = new Stack<String>();
  
        // pushing the elements
        stack1.push(4);
        stack1.push("All");
        stack1.push("Geeks");
  
        stack2.push("Geeks");
        stack2.push("For");
        stack2.push("Geeks");
  
          // Printing the Stack Elements
        System.out.println(stack1);
        System.out.println(stack2);
    }
}

 Producción:

[4, All, Geeks]
[Geeks, For, Geeks]

2. Acceso al elemento: para recuperar o buscar el primer elemento de la pila o el elemento presente en la parte superior de la pila, podemos usar el método peek() . El elemento recuperado no se elimina ni elimina de la pila. 

Java

// Java program to demonstrate the accessing
// of the elements from the stack
import java.util.*;
import java.io.*;
  
public class StackDemo {
  
      // Main Method
    public static void main(String args[])
    {
        // Creating an empty Stack
        Stack<String> stack = new Stack<String>();
  
        // Use push() to add elements into the Stack
        stack.push("Welcome");
        stack.push("To");
        stack.push("Geeks");
        stack.push("For");
        stack.push("Geeks");
  
        // Displaying the Stack
        System.out.println("Initial Stack: " + stack);
  
        // Fetching the element at the head of the Stack
        System.out.println("The element at the top of the"
                           + " stack is: " + stack.peek());
  
        // Displaying the Stack after the Operation
        System.out.println("Final Stack: " + stack);
    }
}

Producción:

Initial Stack: [Welcome, To, Geeks, For, Geeks]
The element at the top of the stack is: Geeks
Final Stack: [Welcome, To, Geeks, For, Geeks]

3. Eliminación de elementos: para sacar un elemento de la pila, podemos usar el método pop() . El elemento se extrae de la parte superior de la pila y se elimina de la misma.

Java

// Java program to demonstrate the removing
// of the elements from the stack
import java.util.*;
import java.io.*;
  
public class StackDemo {
    public static void main(String args[])
    {
        // Creating an empty Stack
        Stack<Integer> stack = new Stack<Integer>();
  
        // Use add() method to add elements
        stack.push(10);
        stack.push(15);
        stack.push(30);
        stack.push(20);
        stack.push(5);
  
        // Displaying the Stack
        System.out.println("Initial Stack: " + stack);
  
        // Removing elements using pop() method
        System.out.println("Popped element: "
                           + stack.pop());
        System.out.println("Popped element: "
                           + stack.pop());
  
        // Displaying the Stack after pop operation
        System.out.println("Stack after pop operation "
                           + stack);
    }
}

Producción:

Initial Stack: [10, 15, 30, 20, 5]
Popped element: 5
Popped element: 20
Stack after pop operation [10, 15, 30]

 Métodos en la clase Stack 

MÉTODO

DESCRIPCIÓN

vacío()

Devuelve verdadero si no hay nada en la parte superior de la pila. De lo contrario, devuelve falso.

ojeada()

Devuelve el elemento en la parte superior de la pila, pero no lo elimina.

estallido()

Elimina y devuelve el elemento superior de la pila. Una ‘EmptyStackException’ 

Se lanza una excepción si llamamos a pop() cuando la pila de invocación está vacía.

empujar (elemento de objeto)

Empuja un elemento en la parte superior de la pila.

buscar (elemento de objeto)

Determina si un objeto existe en la pila. Si se encuentra el elemento,

Devuelve la posición del elemento desde la parte superior de la pila. De lo contrario, devuelve -1.

Métodos heredados de la clase java.util.Vector

MÉTODO

DESCRIPCIÓN

añadir (Objeto objeto) Agrega el elemento especificado al final de este Vector.
agregar (índice int, objeto obj) Inserta el elemento especificado en la posición especificada en este Vector.
addAll(Colección c)

Agrega todos los elementos en la Colección especificada al final de este Vector, 

en el orden en que son devueltos por el iterador de colección especificado.

addAll(índice int, Colección c) Inserta todos los elementos de la Colección especificada en este Vector en la posición especificada.
addElement(Objeto o) Agrega el componente especificado al final de este vector, aumentando su tamaño en uno.
capacidad() Devuelve la capacidad actual de este vector.
clear() Elimina todos los elementos de este Vector.
clon() Devuelve un clon de este vector.
contiene(Objeto o) Devuelve verdadero si este vector contiene el elemento especificado.
contieneTodo(Colección c) Devuelve verdadero si este Vector contiene todos los elementos de la Colección especificada.
copyInto(Objeto []array) Copia los componentes de este vector en la array especificada.
elementoEn(índice int) Devuelve el componente en el índice especificado.
elements() Devuelve una enumeración de los componentes de este vector.
asegurarCapacidad(int minCapacity)

Aumenta la capacidad de este vector, si es necesario, para asegurar que pueda contener 

al menos el número de componentes especificado por el argumento de capacidad mínima.

es igual() Compara el Objeto especificado con este Vector para la igualdad.
primerElemento() Devuelve el primer componente (el elemento en el índice 0) de este vector.
obtener (índice int) Devuelve el elemento en la posición especificada en este Vector.
código hash() Devuelve el valor del código hash para este Vector.
indexOf(Objeto o)

Devuelve el índice de la primera aparición del elemento especificado en este vector, o -1 

si este vector no contiene el elemento.

indexOf(Objeto o, índice int) Devuelve el índice de la primera aparición del elemento especificado en este vector, buscando hacia adelante desde el índice, o devuelve -1 si no se encuentra el elemento.
insertElementAt(Objeto o, índice int) Inserta el objeto especificado como un componente en este vector en el índice especificado.
esta vacio() Comprueba si este vector no tiene componentes.
iterador() Devuelve un iterador sobre los elementos de esta lista en la secuencia adecuada.
últimoElemento() Devuelve el último componente del vector.
lastIndexOf(Objeto o)

Devuelve el índice de la última aparición del elemento especificado en este vector, o -1

 Si este vector no contiene el elemento.

lastIndexOf(Objeto o, índice int)

Devuelve el índice de la última aparición del elemento especificado en este vector, 

buscando hacia atrás desde el índice, o devuelve -1 si no se encuentra el elemento.

listaIterador() Devuelve un iterador de lista sobre los elementos de esta lista (en la secuencia adecuada).
listIterator(índice int)

Devuelve un iterador de lista sobre los elementos de esta lista (en la secuencia adecuada), 

comenzando en la posición especificada en la lista.

eliminar (índice int) Elimina el elemento en la posición especificada en este Vector.
quitar(Objeto o) Elimina la primera aparición del elemento especificado en este Vector. Si el Vector no contiene el elemento, no se modifica.
removeAll(Colección c) Elimina de este Vector todos sus elementos que están contenidos en la Colección especificada.
eliminarTodosLosElementos() Elimina todos los componentes de este vector y establece su tamaño en cero.
removeElement(Objeto o) Elimina la primera ocurrencia (índice más bajo) del argumento de este vector.
removeElementAt(índice int) Elimina el componente en el índice especificado.
removeRange(int fromIndex, int toIndex) Elimina de esta lista todos los elementos cuyo índice se encuentra entre fromIndex, inclusive, y toIndex, exclusivo.
retenerTodo(Colección c) Retiene solo los elementos de este Vector que están contenidos en la Colección especificada.
set(índice int, Objeto o) Reemplaza el elemento en la posición especificada en este Vector con el elemento especificado.
setElementAt(Objeto o, índice int) Establece el componente en el índice especificado de este vector para que sea el objeto especificado.
setSize(int nuevoTamaño) Establece el tamaño de este vector.
Talla() Devuelve el número de componentes de este vector.
subLista(int fromIndex, int toIndex) Devuelve una vista de la parte de esta lista entre fromIndex, inclusive, y toIndex, exclusivo.
aArray() Devuelve una array que contiene todos los elementos de este Vector en el orden correcto.
toArray(Objeto []array)

Devuelve una array que contiene todos los elementos de este Vector en el orden correcto; el tiempo de ejecución

 El tipo de la array devuelta es el de la array especificada.

Enstringr() Devuelve una representación de string de este vector, que contiene la representación de string de cada elemento.
recortarToSize() Recorta la capacidad de este vector para que tenga el tamaño actual del vector.

Nota: tenga en cuenta que la clase Stack en Java es una clase heredada y hereda de Vector en Java . Es una clase segura para subprocesos y, por lo tanto, implica una sobrecarga cuando no necesitamos seguridad para subprocesos. Se recomienda utilizar ArrayDeque para la implementación de la pila, ya que es más eficiente en un entorno de subproceso único.

Java

// A Java Program to show implementation
// of Stack using ArrayDeque
  
import java.util.*;
  
class GFG {
    public static void main (String[] args) {
        Deque<Character> stack = new ArrayDeque<Character>();
        stack.push('A');
        stack.push('B');
        System.out.println(stack.peek());
        System.out.println(stack.pop());
    }
}

Producción: 

B
B

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *