logo

Java-Stack

Der Stapel ist eine lineare Datenstruktur, die zum Speichern der Sammlung von Objekten verwendet wird. Es basiert auf Zuletzt rein, zuerst raus (LIFO). Java-Sammlung Das Framework bietet viele Schnittstellen und Klassen zum Speichern der Sammlung von Objekten. Einer davon ist der Stack-Klasse das verschiedene Operationen wie Push, Pop, Suche usw. bereitstellt.

js globale Variable

In diesem Abschnitt werden wir das besprechen Java-Stack-Klasse , es ist Methoden, Und implementieren die Stapeldatenstruktur in a Java-Programm . Bevor Sie jedoch zur Java-Stack-Klasse wechseln, werfen Sie einen kurzen Blick auf die Funktionsweise des Stacks.

Die Stapeldatenstruktur verfügt über die beiden wichtigsten Operationen drücken Und Pop . Die Push-Operation fügt ein Element in den Stapel ein und die Pop-Operation entfernt ein Element von der Oberseite des Stapels. Mal sehen, wie sie auf dem Stapel funktionieren.

Java-Stack

Schieben wir jeweils 20, 13, 89, 90, 11, 45, 18 in den Stapel.

Java-Stack

Entfernen (pop) wir 18, 45 und 11 vom Stapel.

Java-Stack

Leerer Stapel: Wenn der Stapel kein Element enthält, spricht man von einem leerer Stapel . Wenn der Stapel leer ist, ist der Wert der obersten Variablen -1.

Java-Stack

Wenn wir ein Element in den Stapel schieben, ist es die oberste um 1 erhöht . In der folgenden Abbildung:

  • Drücken Sie 12, oben = 0
  • Drücken Sie 6, oben = 1
  • Drücken Sie 9, oben = 2
Java-Stack

Wenn wir ein Element vom Stapel entfernen, hat top den Wert um 1 verringert . In der folgenden Abbildung haben wir 9 angezeigt.

Java-Stack

Die folgende Tabelle zeigt die unterschiedlichen Werte der Oberseite.

Java-Stack

Java-Stack-Klasse

In Java, Stapel ist eine Klasse, die unter das Collection-Framework fällt, das die erweitert Vektor Klasse. Es implementiert auch Schnittstellen Liste, Sammlung, iterierbar, klonbar, serialisierbar. Es stellt den LIFO-Stapel von Objekten dar. Bevor wir die Stack-Klasse verwenden, müssen wir die importierenjava.utilPaket. Die Stack-Klasse ist in der Collections-Framework-Hierarchie angeordnet, wie unten gezeigt.

Java-Stack

Stack-Klassenkonstruktor

Die Stack-Klasse enthält nur die Standardkonstruktor das erzeugt einen leeren Stapel.

 public Stack() 

Einen Stapel erstellen

Wenn wir einen Stapel erstellen möchten, importieren Sie zunächst denjava.utilPaket und erstellen Sie ein Objekt der Stack-Klasse.

 Stack stk = new Stack(); 

Oder

 Stack stk = new Stack(); 

Wobei Typ den Typ des Stapels angibt, z. B. Ganzzahl, Zeichenfolge usw.

Methoden der Stack-Klasse

Wir können Push-, Pop-, Peek- und Suchvorgänge auf dem Stapel ausführen. Die Java-Stack-Klasse stellt hauptsächlich fünf Methoden zum Ausführen dieser Operationen bereit. Darüber hinaus werden alle Methoden bereitgestellt Java-Vektorklasse .

Methode Modifikator und Typ Methodenbeschreibung
leer() Boolescher Wert Die Methode prüft, ob der Stapel leer ist oder nicht.
push(E-Item) UND Die Methode schiebt (fügt) ein Element oben auf den Stapel.
Pop() UND Die Methode entfernt ein Element oben im Stapel und gibt dasselbe Element als Wert dieser Funktion zurück.
spähen() UND Die Methode betrachtet das oberste Element des Stapels, ohne es zu entfernen.
Suche (Objekt o) int Die Methode durchsucht das angegebene Objekt und gibt die Position des Objekts zurück.

Methode der Stack-Klasse empty()

Der leer() Methode der Stack-Klasse prüft, ob der Stack leer ist oder nicht. Wenn der Stapel leer ist, wird „true“ zurückgegeben, andernfalls wird „false“ zurückgegeben. Wir können auch die Methode isEmpty() der Klasse Vector verwenden.

Syntax

 public boolean empty() 

Kehrt zurück: Die Methode gibt „true“ zurück, wenn der Stapel leer ist, andernfalls gibt sie „false“ zurück.

Im folgenden Beispiel haben wir eine Instanz der Stack-Klasse erstellt. Danach haben wir die Methode empty() zweimal aufgerufen. Beim ersten Mal kehrt es zurück WAHR weil wir kein Element in den Stapel geschoben haben. Danach haben wir Elemente in den Stapel geschoben. Wieder haben wir die Methode empty() aufgerufen, die zurückgibt FALSCH weil der Stapel nicht leer ist.

StackEmptyMethodExample.java

 import java.util.Stack; public class StackEmptyMethodExample { public static void main(String[] args) { //creating an instance of Stack class Stack stk= new Stack(); // checking stack is empty or not boolean result = stk.empty(); System.out.println('Is the stack empty? ' + result); // pushing elements into stack stk.push(78); stk.push(113); stk.push(90); stk.push(120); //prints elements of the stack System.out.println('Elements in Stack: ' + stk); result = stk.empty(); System.out.println('Is the stack empty? ' + result); } } 

Ausgabe:

 Is the stack empty? true Elements in Stack: [78, 113, 90, 120] Is the stack empty? false 

Push()-Methode der Stack-Klasse

Die Methode fügt ein Element oben auf den Stapel ein. Sie funktioniert genauso wie die Methode addElement(item) der Vector-Klasse. Es übergibt einen Parameter Artikel in den Stapel geschoben werden.

Syntax

 public E push(E item) 

Parameter: Ein Gegenstand, der oben auf den Stapel geschoben wird.

Kehrt zurück: Die Methode gibt das Argument zurück, das wir als Parameter übergeben haben.

Methode der Stack-Klasse pop()

Die Methode entfernt ein Objekt oben im Stapel und gibt dasselbe Objekt zurück. Es wirft EmptyStackException wenn der Stapel leer ist.

Syntax

 public E pop() 

Kehrt zurück: Es gibt ein Objekt zurück, das sich oben im Stapel befindet.

Lassen Sie uns den Stapel in einem Java-Programm implementieren und Push- und Pop-Operationen ausführen.

StackPushPopExample.java

 import java.util.*; public class StackPushPopExample { public static void main(String args[]) { //creating an object of Stack class Stack stk = new Stack(); System.out.println('stack: ' + stk); //pushing elements into the stack pushelmnt(stk, 20); pushelmnt(stk, 13); pushelmnt(stk, 89); pushelmnt(stk, 90); pushelmnt(stk, 11); pushelmnt(stk, 45); pushelmnt(stk, 18); //popping elements from the stack popelmnt(stk); popelmnt(stk); //throws exception if the stack is empty try { popelmnt(stk); } catch (EmptyStackException e) { System.out.println('empty stack'); } } //performing push operation static void pushelmnt(Stack stk, int x) { //invoking push() method stk.push(new Integer(x)); System.out.println('push -> ' + x); //prints modified stack System.out.println('stack: ' + stk); } //performing pop operation static void popelmnt(Stack stk) { System.out.print('pop -> '); //invoking pop() method Integer x = (Integer) stk.pop(); System.out.println(x); //prints modified stack System.out.println('stack: ' + stk); } } 

Ausgabe:

 stack: [] push -> 20 stack: [20] push -> 13 stack: [20, 13] push -> 89 stack: [20, 13, 89] push -> 90 stack: [20, 13, 89, 90] push -> 11 stack: [20, 13, 89, 90, 11] push -> 45 stack: [20, 13, 89, 90, 11, 45] push -> 18 stack: [20, 13, 89, 90, 11, 45, 18] pop -> 18 stack: [20, 13, 89, 90, 11, 45] pop -> 45 stack: [20, 13, 89, 90, 11] pop -> 11 stack: [20, 13, 89, 90] 

peek()-Methode der Stack-Klasse

Es betrachtet das Element, das sich oben im Stapel befindet. Es wirft auch EmptyStackException wenn der Stapel leer ist.

Syntax

 public E peek() 

Kehrt zurück: Es gibt die obersten Elemente des Stapels zurück.

Sehen wir uns ein Beispiel der peek()-Methode an.

StackPeekMethodExample.java

 import java.util.Stack; public class StackPeekMethodExample { public static void main(String[] args) { Stack stk= new Stack(); // pushing elements into Stack stk.push('Apple'); stk.push('Grapes'); stk.push('Mango'); stk.push('Orange'); System.out.println('Stack: ' + stk); // Access element from the top of the stack String fruits = stk.peek(); //prints stack System.out.println('Element at top: ' + fruits); } } 

Ausgabe:

 Stack: [Apple, Grapes, Mango, Orange] Element at the top of the stack: Orange 

Die Methode durchsucht das Objekt im Stapel von oben. Es analysiert einen Parameter, nach dem wir suchen möchten. Es gibt die 1-basierte Position des Objekts im Stapel zurück. Das oberste Objekt des Stapels wird im Abstand 1 betrachtet.

Angenommen, o ist ein Objekt im Stapel, nach dem wir suchen möchten. Die Methode gibt den Abstand von der Oberseite des Stapels des Vorkommens zurück, das der Oberseite des Stapels am nächsten liegt. Es benutzt gleich() Methode zum Suchen eines Objekts im Stapel.

Syntax

 public int search(Object o) 

Parameter: o ist das gewünschte Objekt, das durchsucht werden soll.

Kehrt zurück: Es gibt die Objektposition von der Oberseite des Stapels zurück. Wenn -1 zurückgegeben wird, bedeutet dies, dass sich das Objekt nicht auf dem Stapel befindet.

Sehen wir uns ein Beispiel der search()-Methode an.

StackSearchMethodExample.java

 import java.util.Stack; public class StackSearchMethodExample { public static void main(String[] args) { Stack stk= new Stack(); //pushing elements into Stack stk.push('Mac Book'); stk.push('HP'); stk.push('DELL'); stk.push('Asus'); System.out.println('Stack: ' + stk); // Search an element int location = stk.search('HP'); System.out.println('Location of Dell: ' + location); } } 

Java-Stack-Operationen

Größe des Stapels

Wir können die Größe des Stapels auch mithilfe der Methode size() der Klasse Vector ermitteln. Es gibt die Gesamtzahl der Elemente (Größe des Stapels) im Stapel zurück.

Syntax

 public int size() 

Sehen wir uns ein Beispiel der size()-Methode der Vector-Klasse an.

StackSizeExample.java

 import java.util.Stack; public class StackSizeExample { public static void main (String[] args) { Stack stk = new Stack(); stk.push(22); stk.push(33); stk.push(44); stk.push(55); stk.push(66); // Checks the Stack is empty or not boolean rslt=stk.empty(); System.out.println('Is the stack empty or not? ' +rslt); // Find the size of the Stack int x=stk.size(); System.out.println('The stack size is: '+x); } } 

Ausgabe:

 Is the stack empty or not? false The stack size is: 5 

Elemente iterieren

Iterieren bedeutet, die Elemente des Stapels abzurufen. Wir können Elemente des Stapels mit drei verschiedenen Methoden abrufen:

  • Benutzen Iterator() Methode
  • Benutzen für jede() Methode
  • Benutzen listIterator() Methode

Verwendung der iterator()-Methode

Es ist die Methode der Iterator-Schnittstelle. Es gibt einen Iterator über die Elemente im Stapel zurück. Bevor Sie die Methode iterator() verwenden, importieren Sie diejava.util.IteratorPaket.

Syntax

 Iterator iterator() 

Führen wir eine Iteration über den Stapel durch.

StackIterationExample1.java

 import java.util.Iterator; import java.util.Stack; public class StackIterationExample1 { public static void main (String[] args) { //creating an object of Stack class Stack stk = new Stack(); //pushing elements into stack stk.push('BMW'); stk.push('Audi'); stk.push('Ferrari'); stk.push('Bugatti'); stk.push('Jaguar'); //iteration over the stack Iterator iterator = stk.iterator(); while(iterator.hasNext()) { Object values = iterator.next(); System.out.println(values); } } } 

Ausgabe:

 BMW Audi Ferrari Bugatti Jaguar 

Verwendung der forEach()-Methode

Java bietet eine forEach()-Methode zum Durchlaufen der Elemente. Die Methode ist in der definiert Wiederholbar Und Strom Schnittstelle.

Syntax

 default void forEach(Consumeraction) 

Lassen Sie uns mit der Methode forEach() über den Stapel iterieren.

StackIterationExample2.java

 import java.util.*; public class StackIterationExample2 { public static void main (String[] args) { //creating an instance of Stack class Stack stk = new Stack(); //pushing elements into stack stk.push(119); stk.push(203); stk.push(988); System.out.println('Iteration over the stack using forEach() Method:'); //invoking forEach() method for iteration over the stack stk.forEach(n -> { System.out.println(n); }); } } 

Ausgabe:

 Iteration over the stack using forEach() Method: 119 203 988 

Verwendung der listIterator()-Methode

Diese Methode gibt einen Listeniterator über die Elemente in der genannten Liste (nacheinander) zurück, beginnend an der angegebenen Position in der Liste. Es iteriert den Stapel von oben nach unten.

Syntax

 ListIterator listIterator(int index) 

Parameter: Die Methode analysiert einen Parameter mit dem Namen Index.

Kehrt zurück: Diese Methode gibt einen Listeniterator über die Elemente nacheinander zurück.

Ausnahme: Es wirft IndexOutOfBoundsException wenn der Index außerhalb des Bereichs liegt.

Lassen Sie uns mit der Methode listIterator() über den Stapel iterieren.

StackIterationExample3.java

 import java.util.Iterator; import java.util.ListIterator; import java.util.Stack; public class StackIterationExample3 { public static void main (String[] args) { Stack stk = new Stack(); stk.push(119); stk.push(203); stk.push(988); ListIterator ListIterator = stk.listIterator(stk.size()); System.out.println('Iteration over the Stack from top to bottom:'); while (ListIterator.hasPrevious()) { Integer avg = ListIterator.previous(); System.out.println(avg); } } } 

Ausgabe:

 Iteration over the Stack from top to bottom: 988 203 119