Java Collectiekader biedt een Stack-klasse die een Het onderstaande diagram toont de hiërarchie van de Stack-klasse :

De klas ondersteunt er één standaardconstructeur Stapel() wat gewend is maak een lege stapel .
Verklaring:
public class Stack extends Vector>
Alle geïmplementeerde interfaces:
- Serialiseerbaar: Het is een markeringsinterface die klassen moeten implementeren als ze moeten worden geserialiseerd en gedeserialiseerd.
- Kloonbaar: Dit is een interface in Java die door een klasse moet worden geïmplementeerd om het klonen van objecten mogelijk te maken.
- Itereerbaar: Deze interface vertegenwoordigt een verzameling objecten die itereerbaar is, wat betekent dat deze kan worden herhaald.
- Verzameling: Een verzameling vertegenwoordigt een groep objecten die bekend staan als de elementen ervan. De Collectie-interface wordt gebruikt om collecties objecten door te geven waar maximale algemeenheid gewenst is.
- Lijst: De Lijst-interface biedt een manier om de bestelde collectie op te slaan. Het is een onderliggende interface van Collection.
- Willekeurige toegang: Dit is een markeringsinterface die door List-implementaties wordt gebruikt om aan te geven dat ze snelle (over het algemeen constante tijd) willekeurige toegang ondersteunen.
Hoe maak je een stapel?
Om een stapel te maken, moeten we importeren java.util.stack package en gebruik de Stack()-constructor van deze klasse. In het onderstaande voorbeeld wordt een lege stapel gemaakt.
Stapelstapel = nieuwe stapel();
Hier is E het type object.
Voorbeeld:
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 stack)> >{> >for>(>int> i =>0>; i <>5>; i++)> >{> >stack.push(i);> >}> >}> > >// Popping element from the top of the stack> >static> void> stack_pop(Stack 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 stack)> >{> >Integer element = (Integer) stack.peek();> >System.out.println(>'Element on stack top: '> + element);> >}> > >// Searching element in the stack> >static> void> stack_search(Stack 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 stack =>new> Stack();> >stack_push(stack);> >stack_pop(stack);> >stack_push(stack);> >stack_peek(stack);> >stack_search(stack,>2>);> >stack_search(stack,>6>);> >}> }> |
JavaScript-reeks met meerdere regels
>
>
Uitgang:
Pop Operation: 4 3 2 1 0 Element on stack top: 4 Element is found at position: 3 Element not found>
Verschillende bewerkingen uitvoeren op de Stack-klasse
1. Elementen toevoegen: Om een element aan de stapel toe te voegen, kunnen we de push() methode . Dit duw() operatie plaats het element bovenaan de stapel.
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 stack2 =>new> Stack();> >// 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);> >}> }> |
>
>
Uitgang:
[4, All, Geeks] [Geeks, For, Geeks]>
2. Toegang tot het element: Om het eerste element van de stapel of het element bovenaan de stapel op te halen of op te halen, kunnen we gebruiken kijkje() methode. Het opgehaalde element wordt niet verwijderd of uit de stapel verwijderd.
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 stack =>new> Stack();> >// 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);> >}> }> |
smtp-internetprotocol
>
>
Uitgang:
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. Elementen verwijderen: Om een element uit de stapel te halen, kunnen we de knal() methode. Het element wordt van de bovenkant van de stapel gehaald en daaruit verwijderd.
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 stack =>new> Stack();> >// 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);> >}> }> |
>
>
Uitgang:
Initial Stack: [10, 15, 30, 20, 5] Popped element: 5 Popped element: 20 Stack after pop operation [10, 15, 30]>
Voorbeeld
In Java is de Stack-klasse een subklasse van de Vector-klasse en vertegenwoordigt een LIFO-stapel (last-in-first-out) met objecten. Het breidt de Vector-klasse uit om een eenvoudige implementatie van de stapelgegevensstructuur mogelijk te maken.
Hier is een voorbeeld van hoe u de Stack-klasse in Java kunt gebruiken:
Java
import> java.util.Stack;> public> class> StackExample {> >public> static> void> main(String[] args) {> >// Create a new stack> >Stack stack =>new> Stack();> >// Push elements onto the stack> >stack.push(>1>);> >stack.push(>2>);> >stack.push(>3>);> >stack.push(>4>);> >// Pop elements from the stack> >while>(!stack.isEmpty()) {> >System.out.println(stack.pop());> >}> >}> }> |
>
>Uitvoer
4 3 2 1>
In dit voorbeeld importeren we eerst de klasse Stack uit het pakket java.util. Vervolgens maken we een nieuw Stack-object met de naam stack met behulp van de standaardconstructor. We duwen vier gehele getallen op de stapel met behulp van de push() -methode. Vervolgens halen we de elementen uit de stapel met behulp van de pop()-methode in een while-lus. De methode isEmpty() wordt gebruikt om te controleren of de stapel leeg is voordat wordt geprobeerd een element te laten knallen.
Deze code creëert een stapel gehele getallen en duwt 4 gehele getallen op de stapel in de volgorde 1 -> 2 -> 3 -> 4. Vervolgens halen we elementen één voor één uit de stapel met behulp van de pop()-methode, die de bovenste element van de stapel. Omdat de stapel een LIFO-volgorde (last-in-first-out) volgt, worden de elementen in de omgekeerde volgorde van invoeging geplaatst, wat resulteert in de hierboven weergegeven uitvoer.
De klasse Stack biedt verschillende andere methoden voor het manipuleren van de stapel, zoals peek() om het bovenste element op te halen zonder het te verwijderen, search() om naar een element in de stapel te zoeken en de positie ervan terug te geven, en size() om het huidige element terug te geven. grootte van de stapel. De klasse Stack biedt ook verschillende constructors voor het maken van een stapel met een gespecificeerde initiële capaciteit of voor het kopiëren van een bestaande stapel.
Methoden in Stack Class
| METHODE | BESCHRIJVING |
|---|---|
| leeg() | Het retourneert true als er niets bovenaan de stapel ligt. Anders wordt false geretourneerd. Linux taakbeheer |
| kijkje() | Geeft het element bovenaan de stapel terug, maar verwijdert het niet. |
| knal() | Verwijdert het bovenste element van de stapel en retourneert het. Een ‘EmptyStackException’ Er wordt een uitzondering gegenereerd als we pop() aanroepen wanneer de aanroepende stapel leeg is. |
| push(objectelement) | Duwt een element bovenop de stapel. |
| zoeken(Objectelement) | Het bepaalt of een object in de stapel bestaat. Als het element wordt gevonden, Het retourneert de positie van het element vanaf de bovenkant van de stapel. Anders retourneert het -1. |
Methoden overgenomen van klasse java.util.Vector
| METHODE | BESCHRIJVING |
|---|---|
| toevoegen(Objectobject) | Voegt het opgegeven element toe aan het einde van deze vector. |
| add(int index, Object obj) | Voegt het opgegeven element in op de opgegeven positie in deze vector. |
| addAll(verzameling c) | Voegt alle elementen in de opgegeven verzameling toe aan het einde van deze vector, in de volgorde waarin ze worden geretourneerd door de Iterator van de opgegeven verzameling. |
| addAll(int index, Verzameling c) | Voegt alle elementen uit de opgegeven verzameling in deze vector in op de opgegeven positie. |
| addElement(Object o) | Voegt de opgegeven component toe aan het einde van deze vector, waardoor de grootte met één wordt vergroot. |
| capaciteit() | Retourneert de huidige capaciteit van deze vector. |
| duidelijk() | Verwijdert alle elementen uit deze vector. |
| kloon() | Retourneert een kloon van deze vector. |
| bevat(Object o) | Retourneert waar als deze vector het opgegeven element bevat. |
| bevatAlles(Verzameling c) | Retourneert waar als deze vector alle elementen in de opgegeven verzameling bevat. |
| kopiërenInto(Object []array) | Kopieert de componenten van deze vector naar de opgegeven array. |
| elementAt(int-index) | Retourneert de component op de opgegeven index. |
| elementen() | Retourneert een opsomming van de componenten van deze vector. |
| garanderenCapaciteit(int minCapaciteit) | Vergroot indien nodig de capaciteit van deze vector om ervoor te zorgen dat deze kan vasthouden ten minste het aantal componenten dat is opgegeven door het argument voor minimale capaciteit. |
| is gelijk aan() | Vergelijkt het opgegeven object met deze vector voor gelijkheid. |
| eersteElement() | Retourneert de eerste component (het item op index 0) van deze vector. |
| get(int-index) | Retourneert het element op de opgegeven positie in deze vector. |
| hashCode() | Retourneert de hashcodewaarde voor deze vector. |
| indexOf(Object o) | Retourneert de index van de eerste keer dat het opgegeven element in deze vector voorkomt, of -1 als deze vector het element niet bevat. |
| indexOf(Object o, int-index) | Retourneert de index van de eerste keer dat het opgegeven element in deze vector voorkomt, waarbij vooruit wordt gezocht vanuit de index, of retourneert -1 als het element niet wordt gevonden. |
| insertElementAt(Object o, int-index) | Voegt het opgegeven object in als component in deze vector op de opgegeven index. |
| is leeg() | Test of deze vector geen componenten heeft. |
| iterator() | Retourneert een iterator over de elementen in deze lijst in de juiste volgorde. |
| laatsteElement() | Retourneert de laatste component van de vector. |
| laatsteIndexOf(Object o) | Retourneert de index van de laatste keer dat het opgegeven element in deze vector voorkomt, of -1 Als deze vector het element niet bevat. |
| lastIndexOf(Object o, int-index) | Retourneert de index van de laatste keer dat het opgegeven element in deze vector voorkomt, achteruit zoeken vanuit de index, of retourneert -1 als het element niet wordt gevonden. |
| lijstIterator() | Retourneert een lijstiterator over de elementen in deze lijst (in de juiste volgorde). |
| listIterator(int-index) | Geeft een lijstiterator terug over de elementen in deze lijst (in de juiste volgorde), beginnend op de opgegeven positie in de lijst. |
| verwijder(int index) | Verwijdert het element op de opgegeven positie in deze vector. |
| verwijder(Object o) | Verwijdert de eerste keer dat het opgegeven element in deze vector voorkomt. Als de vector het element niet bevat, blijft deze ongewijzigd. |
| removeAll(Verzameling c) | Verwijdert uit deze vector alle elementen die zich in de opgegeven verzameling bevinden. |
| verwijderAlleElementen() | Verwijdert alle componenten van deze vector en stelt de grootte in op nul. |
| removeElement(Object o) | Verwijdert het eerste (laagst geïndexeerde) exemplaar van het argument uit deze vector. |
| removeElementAt(int-index) | Verwijdert de component op de opgegeven index. |
| removeRange(int vanIndex, int naarIndex) | Verwijdert uit deze lijst alle elementen waarvan de index zich tussen fromIndex, inclusief, en toIndex, exclusief bevindt. |
| behoudenAlles(Verzameling c) | Behoudt alleen de elementen in deze vector die deel uitmaken van de opgegeven verzameling. |
| set(int index, Object o) | Vervangt het element op de opgegeven positie in deze vector door het opgegeven element. |
| setElementAt(Object o, int-index) | Stelt de component in op de opgegeven index van deze vector als het opgegeven object. |
| setSize(int nieuweSize) | Stelt de grootte van deze vector in. |
| maat() | Retourneert het aantal componenten in deze vector. |
| subLijst(int vanIndex, int naarIndex) | Retourneert een weergave van het gedeelte van deze lijst tussen fromIndex, inclusief, en toIndex, exclusief. |
| toArray() | Retourneert een array die alle elementen in deze vector in de juiste volgorde bevat. |
| toArray(Object []array) | Geeft een array terug die alle elementen in deze vector in de juiste volgorde bevat; de looptijd het type van de geretourneerde array is dat van de opgegeven array. |
| toString() | Retourneert een tekenreeksrepresentatie van deze vector, die de tekenreeksrepresentatie van elk element bevat. |
| trimToSize() | Trimt de capaciteit van deze vector zodat deze de huidige grootte van de vector heeft. |
Geef prioriteit aan het gebruik van Over wat over stapel -:
De Stack-klasse in Java is een oudere klasse en erft van Vector op Java . Het is een thread-safe klasse en er is dus sprake van overhead als we geen thread-veiligheid nodig hebben. Het wordt aanbevolen om te gebruiken ArrayDeque voor stackimplementatie omdat het efficiënter is in een single-threaded omgeving.
Java
// A Java Program to show implementation> // of Stack using ArrayDeque> import> java.util.*;> class> GFG {> >public> static> void> main (String[] args) {> >Deque stack =>new> ArrayDeque();> >stack.push(>'A'>);> >stack.push(>'B'>);> >System.out.println(stack.peek());> >System.out.println(stack.pop());> >}> }> |
>
>
Uitgang:
B B>
Nog een reden om Deque boven Stack te gebruiken, is dat Deque de mogelijkheid heeft om streams naar een lijst te converteren, waarbij het LIFO-concept wordt toegepast, terwijl Stack dat niet doet.
Java
1 miljard tot miljoen
import> java.util.*;> import> java.util.stream.Collectors;> class> GFG {> >public> static> void> main (String[] args) {> > >Stack stack =>new> Stack();> >Deque deque =>new> ArrayDeque();> >stack.push(>1>);>//1 is the top> >deque.push(>1>);>//1 is the top> >stack.push(>2>);>//2 is the top> >deque.push(>2>);>//2 is the top> >List list1 = stack.stream().collect(Collectors.toList());>//[1,2]> >System.out.println(>'Using Stack -'>);> >for>(>int> i =>0>; i System.out.print(list1.get(i) + ' ' ); } System.out.println(); List list2 = deque.stream().collect(Collectors.toList());//[2,1] System.out.println('Using Deque -'); for(int i = 0; i System.out.print(list2.get(i) + ' ' ); } System.out.println(); } }> |
>
>Uitvoer
Using Stack - 1 2 Using Deque - 2 1>