logo

Java-stapel

De stapel is een lineaire datastructuur die wordt gebruikt om de verzameling objecten op te slaan. Het is gebaseerd op Laatste erin, eerste eruit (LIFO). Java-collectie framework biedt veel interfaces en klassen om de verzameling objecten op te slaan. Eén daarvan is de Stapel klasse dat verschillende bewerkingen biedt, zoals push, pop, zoeken, enz.

In deze sectie bespreken we de Java Stack-klasse , zijn methoden, En implementeren de stapelgegevensstructuur in a Java-programma . Maar voordat u naar de Java Stack-klasse gaat, moet u snel zien hoe de stapel werkt.

De stapelgegevensstructuur heeft de twee belangrijkste bewerkingen duw En knal . De push-operatie voegt een element in de stapel en de pop-operatie verwijdert een element van de bovenkant van de stapel. Laten we eens kijken hoe ze op stapel werken.

Java-stapel

Laten we respectievelijk 20, 13, 89, 90, 11, 45, 18 in de stapel duwen.

Java-stapel

Laten we 18, 45 en 11 van de stapel verwijderen (pop).

Java-stapel

Lege stapel: Als de stapel geen element bevat, wordt dit een lege stapel . Als de stapel leeg is, is de waarde van de bovenste variabele -1.

Java-stapel

Wanneer we een element in de stapel duwen, is de bovenkant verhoogd met 1 . In de volgende figuur,

  • Druk op 12, boven=0
  • Druk op 6, bovenaan=1
  • Druk op 9, bovenaan=2
Java-stapel

Wanneer we een element uit de stapel halen, is de waarde van top verlaagd met 1 . In de volgende afbeelding hebben we er 9 gevonden.

Java-stapel

De volgende tabel toont de verschillende waarden van de bovenkant.

Java-stapel

Java Stack-klasse

Op Java, Stapel is een klasse die valt onder het Collection-framework dat de Vector klas. Het implementeert ook interfaces Lijst, verzameling, itereerbaar, kloonbaar, serialiseerbaar. Het vertegenwoordigt de LIFO-stapel objecten. Voordat we de Stack-klasse gebruiken, moeten we dejava.utilpakket. De stapelklasse gerangschikt in de hiërarchie van het Collections-framework, zoals hieronder weergegeven.

Java-stapel

Constructor van stapelklasse

De klasse Stack bevat alleen de standaardconstructeur waardoor er een lege stapel ontstaat.

 public Stack() 

Een stapel maken

Als we een stapel willen maken, importeer dan eerst hetjava.utilpackage en maak een object van de Stack-klasse.

 Stack stk = new Stack(); 

Of

 Stack stk = new Stack(); 

Waarbij type het type stapel aangeeft, zoals Integer, String, etc.

Methoden van de Stack-klasse

We kunnen push-, pop-, peek- en zoekbewerkingen op de stapel uitvoeren. De klasse Java Stack biedt hoofdzakelijk vijf methoden om deze bewerkingen uit te voeren. Daarnaast biedt het ook alle methoden van de Java Vector-klasse .

Methode Modificator en type Methode Beschrijving
leeg() Booleaans De methode controleert of de stapel leeg is of niet.
push(E-artikel) EN De methode duwt (invoegt) een element op de bovenkant van de stapel.
knal() EN De methode verwijdert een element van de bovenkant van de stapel en retourneert hetzelfde element als de waarde van die functie.
kijkje() EN De methode kijkt naar het bovenste element van de stapel zonder dit te verwijderen.
zoeken(Object o) int De methode doorzoekt het opgegeven object en retourneert de positie van het object.

Stapelklasse leeg() Methode

De leeg() methode van de Stack-klasse controleer of de stapel leeg is of niet. Als de stapel leeg is, retourneert deze waar, anders retourneert deze onwaar. We kunnen ook de methode isEmpty() van de klasse Vector gebruiken.

Syntaxis

 public boolean empty() 

Geeft terug: De methode retourneert true als de stapel leeg is, anders retourneert false.

In het volgende voorbeeld hebben we een exemplaar van de klasse Stack gemaakt. Daarna hebben we de methode empty() twee keer aangeroepen. De eerste keer dat het terugkeert WAAR omdat we geen enkel element in de stapel hebben geduwd. Daarna hebben we elementen in de stapel geschoven. We hebben opnieuw de methode empty() aangeroepen die terugkeert vals omdat de stapel niet leeg is.

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); } } 

Uitgang:

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

Stack Class push()-methode

Bij deze methode wordt een item bovenaan de stapel ingevoegd. Het werkt hetzelfde als de methode addElement(item) van de klasse Vector. Er wordt een parameter doorgegeven item in de stapel te worden geduwd.

Syntaxis

 public E push(E item) 

Parameter: Een item dat bovenop de stapel moet worden geschoven.

Geeft terug: De methode retourneert het argument dat we als parameter hebben doorgegeven.

Stack Class pop()-methode

De methode verwijdert een object bovenaan de stapel en retourneert hetzelfde object. Het gooit EmptyStackException als de stapel leeg is.

Syntaxis

 public E pop() 

Geeft terug: Het retourneert een object dat zich bovenaan de stapel bevindt.

Laten we de stapel in een Java-programma implementeren en push- en pop-bewerkingen uitvoeren.

StackPushPopExample.java

hoe u de weergavegrootte weet
 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); } } 

Uitgang:

 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] 

Stack Class peek()-methode

Er wordt gekeken naar het element dat zich bovenaan de stapel bevindt. Het gooit ook EmptyStackException als de stapel leeg is.

Syntaxis

 public E peek() 

Geeft terug: Het retourneert de bovenste elementen van de stapel.

Laten we een voorbeeld bekijken van de methode peek().

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); } } 

Uitgang:

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

De methode zoekt het object in de stapel vanaf de bovenkant. Het parseert een parameter waarnaar we willen zoeken. Het retourneert de op 1 gebaseerde locatie van het object in de stapel. Het bovenste object van de stapel wordt op afstand 1 beschouwd.

Stel dat o een object in de stapel is waarnaar we willen zoeken. De methode retourneert de afstand vanaf de bovenkant van de stapel tot de gebeurtenis die zich het dichtst bij de bovenkant van de stapel bevindt. Het gebruikt is gelijk aan() methode om een ​​object in de stapel te zoeken.

Syntaxis

 public int search(Object o) 

Parameter: o is het gewenste object dat moet worden doorzocht.

Geeft terug: Het retourneert de objectlocatie vanaf de bovenkant van de stapel. Als het -1 retourneert, betekent dit dat het object niet op de stapel ligt.

Laten we een voorbeeld bekijken van de methode search().

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-stackbewerkingen

Grootte van de stapel

We kunnen de grootte van de stapel ook vinden met behulp van de size() methode van de Vector klasse . Het retourneert het totale aantal elementen (grootte van de stapel) in de stapel.

Syntaxis

 public int size() 

Laten we een voorbeeld bekijken van de methode size() van de klasse Vector.

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); } } 

Uitgang:

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

Herhaal elementen

Itereren betekent het ophalen van de elementen van de stapel. We kunnen elementen van de stapel ophalen met behulp van drie verschillende methoden:

  • Gebruik makend van iterator() Methode
  • Gebruik makend van voorElke() Methode
  • Gebruik makend van lijstIterator() Methode

Met behulp van de iterator()-methode

Het is de methode van de Iterator-interface. Het retourneert een iterator over de elementen in de stapel. Voordat u de iterator()-methode gebruikt, importeert u hetjava.util.Iteratorpakket.

Syntaxis

 Iterator iterator() 

Laten we een iteratie over de stapel uitvoeren.

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); } } } 

Uitgang:

 BMW Audi Ferrari Bugatti Jaguar 

De methode forEach() gebruiken

Java biedt een forEach()-methode om de elementen te herhalen. De methode is gedefinieerd in de Itereerbaar En Stroom koppel.

Syntaxis

 default void forEach(Consumeraction) 

Laten we de stapel herhalen met behulp van de methode forEach().

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); }); } } 

Uitgang:

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

Methode listIterator() gebruiken

Deze methode retourneert een lijstiterator over de elementen in de genoemde lijst (in volgorde), beginnend op de opgegeven positie in de lijst. Het itereert de stapel van boven naar beneden.

Syntaxis

 ListIterator listIterator(int index) 

Parameter: De methode parseert een parameter met de naam inhoudsopgave.

Geeft terug: Deze methode retourneert een lijstiterator over de elementen, in volgorde.

Uitzondering: Het gooit IndexOutOfBoundsException als de index buiten bereik is.

Laten we de stapel herhalen met behulp van de listIterator() -methode.

StackIterationExample3.java

bevat subtekenreeks 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); } } } 

Uitgang:

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