CodeGym /Java Blog /Random-IT /Java Stack 101: approfondire la classe Stack
John Squirrels
Livello 41
San Francisco

Java Stack 101: approfondire la classe Stack

Pubblicato nel gruppo Random-IT
Lo Stack in Java è una struttura di dati, molto simile a una coda, un array, un elenco collegato o un albero. Dove differisce dagli altri è che lo stack Java si basa sul principio LIFO (Last In, First Out). Ciò significa che quando usi i due comandi per aggiungere e rimuovere un elemento dallo stack, il primo che rimuovi sarà sempre l'ultimo che hai aggiunto. Diamo un'occhiata più da vicino alla classe Java Stack

Esplorare la classe Java Stack

La Java Stack Class è un'estensione della classe Vector , che a sua volta estende la classe List . Poiché i vettori sono mutabili e possono crescere e ridursi con le richieste degli elementi all'interno, Stack s può anche cambiare dimensione su richiesta. L'estensione della classe Vector aggiunge cinque operazioni che trasformano un Vector in uno Stack . Queste cinque operazioni sono:
  • .push(E item) – posiziona un elemento in cima allo stack
  • .pop() – rimuove l'elemento in cima allo stack e lo restituisce come valore della funzione
  • .peek() – guarda l'elemento in cima allo stack senza rimuoverlo
  • .empty() – Funzione booleana per verificare se lo stack è vuoto o meno. Restituisce uno 0 o 1.
  • .search(Object o) – Cerca o e restituisce la sua posizione. Il valore è in base 1, non in base 0
Stack eredita anche tutti i metodi che fanno parte di Vector , inclusi ma non limitati a, toString() , contains() , indexOf() e lastElement() . Java Stack 101: approfondire la classe Stack - 1

Codifica di un esempio di stack Java

Ora che conosciamo le funzioni per Stack , codifichiamo un esempio di stack Java. Gli stack sono molto utili per gestire i dati che devono essere archiviati temporaneamente e recuperati rapidamente. Poiché lo Stack è LIFO, è eccezionalmente utile per l'attraversamento dei nodi durante l'esplorazione di una struttura di dati ad albero. Prima di entrare in tutto ciò, creiamo uno stack di base. Il codice per implementare uno stack è il seguente:

import java.util.*;

class Main {
  public static void main(String[] args) {
    Stack<Integer> stackExample = new Stack<Integer>();
Questo è tutto ciò che devi fare per creare uno Stack vuoto . Puoi anche dichiararlo semplicemente senza dichiarare un tipo di dati usando:

Stack example = new Stack();
Ricorda che poiché gli Stack s sono mutabili, quando spingiamo gli elementi nello stack, si adatterà automaticamente alle dimensioni. Ora diamo un'occhiata a come utilizzare le funzioni Stack .

Implementazione dello stack Java

Diamo un'occhiata a come utilizzare i cinque metodi che abbiamo esplorato brevemente in precedenza. L'implementazione dello stack Java è facile da ricordare se la pensi come una pila di piatti. Metti i piatti sulla pila, ma per prendere un piatto non vai in fondo, ne prendi uno dall'alto. L'ultimo che metti è il primo che togli. Estendendo il nostro esempio precedente con stackExample , le funzioni sono le seguenti:

Spingere


// pushing integers onto the Stack
    stackExample.push(5);
    stackExample.push(10);
A questo punto, mostreremo le altre funzioni come se avessimo inserito ogni volta questi due numeri interi nell'esempio dello stack Java.

Pop


//popping integers off of the Stack
System.out.println(stackExample.pop());
System.out.println(stackExample.pop());
Produzione:

10
5

È vuoto

Ora, supponiamo che tu voglia rimuovere tutti gli elementi da uno Stack ma non sei sicuro di quanti elementi ci siano. È possibile combinare la funzione Boolean.isEmpty() con una precondizione while loop per estrarre tutti gli elementi dallo Stack . Guarda come viene eseguita questa implementazione dello stack Java.

while(!stackExample.isEmpty()) {      
  System.out.println(stackExample.pop());
}
Produzione

10
5

Sbirciare

Possiamo usare .peek() come implementazione dello stack in Java per dare un'occhiata all'elemento successivo nello Stack senza rimuoverlo.

System.out.println(stackExample.peek());
Produzione

10
Se estraiamo e stampiamo lo Stack , restituirà 10 e 5 perché il 10 è ancora nello stack. L'abbiamo solo guardato, non l'abbiamo rimosso con la funzione pop. La funzione peek è un ottimo strumento per Stack s in java.

Ricerca

Se vogliamo trovare un elemento specifico, l'implementazione degli stack in Java utilizza .search(e); per trovarlo.

System.out.println(stackExample.search(5));
Produzione

2
Ricorda che questo è perché contiamo dall'alto dello Stack e gli Stack Java iniziano da 1, non da 0 come un Array . Quindi, guardando la pila, è (10) --> (5), e 5 è nella posizione numero 2. Se provi a trovare un elemento che non è in Stack , otterrai un -1 come output.

Iterare

Quando si lavora con qualsiasi raccolta, a volte potrebbe essere necessario cercare più elementi. Per risparmiare complessità e dover cercare più volte nello Stack , puoi utilizzare l'iterazione. Poiché Stack in Java estende la classe List , esistono diverse opzioni per l'iterazione. Uno dei più semplici consiste nell'usare semplicemente la funzione ListIterator . ListIterator è utile in quanto ti consente di attraversare uno Stack dall'alto verso il basso o dal basso verso l'alto usando .hasPrevious() o .hasNext() . Ecco come appare:

ListIterator<Integer> exampleIterator = stackExample.listIterator(stackExample.size());

  while (exampleIterator.hasPrevious()) {
    int iteration = exampleIterator.previous();
    System.out.println(iteration);
  }
Produzione

10
5
Tieni presente che quando esegui l'iterazione su Stack s in Java, non rimuovi alcun elemento al suo interno. L'iterazione consente essenzialmente di sbirciare ogni elemento nello stack in ordine. Quando lo fai, puoi cercare posizioni in cui si trovano determinati elementi e poi esaminarli e manipolarli. Puoi contarli, eliminarli o persino modificarli se necessario.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION