CodeGym /Java-Blog /Random-DE /Java Stack 101: Eintauchen in die Stack-Klasse
Autor
Aditi Nawghare
Software Engineer at Siemens

Java Stack 101: Eintauchen in die Stack-Klasse

Veröffentlicht in der Gruppe Random-DE
Der Stack in Java ist eine Datenstruktur, ähnlich einer Warteschlange, einem Array, einer verknüpften Liste oder einem Baum. Der Unterschied zu den anderen besteht darin, dass der Java Stack auf dem Last In, First Out (LIFO)-Prinzip basiert. Das bedeutet, dass, wenn Sie die beiden Befehle zum Hinzufügen und Entfernen eines Elements zum Stapel verwenden, das erste, das Sie entfernen, immer das letzte ist, das Sie hinzugefügt haben. Schauen wir uns die Java- Stack -Klasse genauer an

Erkundung der Java-Stack-Klasse

Die Java- Stack- Klasse ist eine Erweiterung der Vector- Klasse, die ihrerseits die List- Klasse erweitert . Da Vektoren veränderlich sind und mit den Anforderungen der darin enthaltenen Elemente wachsen und schrumpfen können, können Stacks bei Bedarf auch ihre Größe ändern. Die Erweiterung der Vector- Klasse fügt fünf Operationen hinzu, die einen Vector in einen Stack umwandeln . Diese fünf Operationen sind:
  • .push(E item) – platziert ein Element oben auf dem Stapel
  • .pop() – entfernt das Element oben im Stapel und gibt es als Wert der Funktion zurück
  • .peek() – betrachtet das Element oben im Stapel, ohne es zu entfernen
  • .empty() – Boolesche Funktion zum Testen, ob der Stapel leer ist oder nicht. Gibt eine 0 oder 1 zurück.
  • .search(Object o) – Sucht nach o und gibt seine Position zurück. Der Wert ist 1-basiert, nicht 0-basiert
Stack erbt außerdem alle Methoden, die Teil von Vector sind , einschließlich, aber nicht beschränkt auf, toString() , enthält() , indexOf() und lastElement() . Java Stack 101: Eintauchen in die Stack-Klasse – 1

Codieren eines Java-Stack-Beispiels

Nachdem wir nun die Funktionen für den Stack kennen , programmieren wir ein Java-Stack-Beispiel. Stacks sind sehr nützlich für den Umgang mit Daten, die vorübergehend gespeichert und schnell abgerufen werden müssen. Da es sich bei dem Stack um einen LIFO-Stack handelt, eignet er sich hervorragend für die Knotendurchquerung bei der Erkundung einer Baumdatenstruktur. Bevor wir uns damit befassen, erstellen wir einen Basisstapel. Der Code zum Implementieren eines Stapels lautet wie folgt:

import java.util.*;

class Main {
  public static void main(String[] args) {
    Stack<Integer> stackExample = new Stack<Integer>();
Das ist alles, was Sie tun müssen, um einen leeren Stack zu erstellen . Sie können es auch einfach deklarieren, ohne einen Datentyp zu deklarieren, indem Sie Folgendes verwenden:

Stack example = new Stack();
Denken Sie daran, dass sich die Größe von Stacks automatisch anpasst, wenn wir Elemente auf den Stack schieben, da er veränderbar ist. Schauen wir uns nun an, wie die Stack- Funktionen verwendet werden.

Java-Stack-Implementierung

Schauen wir uns an, wie wir die fünf Methoden anwenden, die wir zuvor kurz untersucht haben. Die Java-Stack-Implementierung ist leicht zu merken, wenn man sie sich als einen Plattenstapel vorstellt. Man legt Teller auf den Stapel, aber um einen Teller zu bekommen, muss man nicht nach unten gehen, sondern einen von oben. Das letzte, das Sie anziehen, ist das erste, das Sie ausziehen. Wenn wir unser vorheriges Beispiel mit stackExample erweitern , lauten die Funktionen wie folgt:

Drücken


// pushing integers onto the Stack
    stackExample.push(5);
    stackExample.push(10);
An dieser Stelle zeigen wir die anderen Funktionen so, als ob wir diese beiden Ganzzahlen jedes Mal auf das Java-Stack-Beispiel übertragen hätten.

Pop


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

10
5

Ist leer

Angenommen, Sie möchten alle Elemente aus einem Stapel entfernen , sind sich aber nicht sicher, wie viele Elemente es gibt. Sie können die Funktion Boolean.isEmpty() mit einer Vorbedingungs-While-Schleife kombinieren, um alle Elemente aus dem Stack zu entfernen . Schauen Sie sich an, wie diese Java-Stack-Implementierung durchgeführt wird.

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

10
5

Spähen

Wir können .peek() als Stack-Implementierung in Java verwenden , um einen Blick auf das nächste Element im Stack zu werfen , ohne es zu entfernen.

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

10
Wenn wir den Stack öffnen und ausdrucken , werden 10 und 5 zurückgegeben, da sich die 10 noch auf dem Stapel befindet. Wir haben es nur angeschaut, wir haben es nicht mit der Pop-Funktion entfernt. Die Peek-Funktion ist ein großartiges Tool für Stacks in Java.

Suchen

Wenn wir ein bestimmtes Element finden möchten, verwendet die Stacks-Implementierung in Java .search(e); es zu finden.

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

2
Denken Sie daran, dass dies daran liegt, dass wir von der Spitze des Stapels aus zählen und Java- Stacks bei 1 beginnen, nicht bei 0 wie ein Array . Wenn man sich den Stapel ansieht, ist er also (10) -> (5) und 5 steht auf Platz 2. Wenn Sie versuchen, ein Element zu finden, das sich nicht im Stack befindet , erhalten Sie als Ausgabe eine -1.

Iterieren

Bei der Arbeit mit einer Sammlung kann es vorkommen, dass Sie nach mehreren Elementen suchen müssen. Um Komplexität zu sparen und den Stapel mehrmals durchsuchen zu müssen , können Sie Iteration verwenden. Da Stack in Java die List- Klasse erweitert , gibt es mehrere Optionen für die Iteration. Eine der einfachsten Möglichkeiten besteht darin, einfach die ListIterator- Funktion zu verwenden. Das Schöne an ListIterator ist, dass Sie mit .hasPrevious() oder .hasNext() einen Stack von oben nach unten oder von unten nach oben durchlaufen können . So sieht es aus:

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

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

10
5
Bedenken Sie, dass Sie beim Durchlaufen von Stacks in Java keine darin enthaltenen Elemente entfernen. Durch das Iterieren können Sie im Wesentlichen jedes Element im Stapel der Reihe nach betrachten. Wenn Sie dies tun, können Sie nach Orten suchen, an denen sich bestimmte Elemente befinden, und diese dann durchgehen und bearbeiten. Sie können sie bei Bedarf zählen, löschen oder sogar ändern.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION