CodeGym /Java Blog /Willekeurig /Java Stack 101: verdiepen in de Stack-klasse
John Squirrels
Niveau 41
San Francisco

Java Stack 101: verdiepen in de Stack-klasse

Gepubliceerd in de groep Willekeurig
De stapel in Java is een gegevensstructuur, vergelijkbaar met een wachtrij, array, gekoppelde lijst of boomstructuur. Waar het verschilt van de anderen, is dat de Java Stack is gebaseerd op het Last In, First Out (LIFO) -principe. Dit betekent dat wanneer u de twee opdrachten gebruikt om een ​​element toe te voegen aan of te verwijderen uit de stapel, het eerste dat u verwijdert altijd het laatste is dat u hebt toegevoegd. Laten we de Java Stack Class eens nader bekijken

De Java Stack-klasse verkennen

De Java Stack Class is een uitbreiding van de Vector- klasse, die zelf de List- klasse uitbreidt. Omdat vectoren veranderlijk zijn en kunnen groeien en krimpen met de eisen van de elementen erin, kan Stack s ook op verzoek van grootte veranderen. De uitbreiding van de klasse Vector voegt vijf bewerkingen toe die een vector in een stapel transformeren . Deze vijf bewerkingen zijn:
  • .push(E item) – plaatst een element bovenop de stapel
  • .pop() – verwijdert het element bovenaan de stapel en retourneert het als de waarde van de functie
  • .peek() – kijkt naar het element bovenaan de stapel zonder het te verwijderen
  • .empty() – Booleaanse functie om te testen of de stapel leeg is of niet. Retourneert een 0 of 1.
  • .search(Object o) – Zoekt naar o en geeft de positie terug. De waarde is gebaseerd op 1, niet op 0
Stack erft ook alle methoden die deel uitmaken van Vector , inclusief maar niet beperkt tot toString() , comes() , indexOf() en lastElement() . Java Stack 101: verdiepen in de Stack Class - 1

Een voorbeeld van een Java-stack coderen

Nu we de functies voor de Stack kennen , gaan we een voorbeeld van een Java-stack coderen. Stapels zijn erg handig voor het verwerken van gegevens die tijdelijk moeten worden opgeslagen en snel moeten worden opgehaald. Omdat de Stack LIFO is, is het uitzonderlijk handig voor het doorkruisen van knooppunten bij het verkennen van een boomstructuur. Laten we, voordat we daar allemaal op ingaan, een basisstapel maken. De code om een ​​stapel te implementeren is als volgt:

import java.util.*;

class Main {
  public static void main(String[] args) {
    Stack<Integer> stackExample = new Stack<Integer>();
Dat is alles wat u hoeft te doen om een ​​lege stapel te maken . U kunt het ook gewoon declareren zonder een gegevenstype te declareren door gebruik te maken van:

Stack example = new Stack();
Onthoud dat omdat stapels veranderlijk zijn, als we elementen op de stapel duwen, deze automatisch in grootte worden aangepast. Laten we nu eens kijken hoe we de Stack- functies kunnen gebruiken.

Java Stack-implementatie

Laten we eens kijken hoe we de vijf methoden kunnen gebruiken die we eerder kort hebben onderzocht. Java-stackimplementatie is gemakkelijk te onthouden als je het ziet als een stapel platen. Je legt borden op de stapel, maar om een ​​bord te krijgen, ga je niet naar beneden, maar pak je er een van boven. De laatste die je aantrekt, is de eerste die je uitdoet. Als we ons vorige voorbeeld uitbreiden met stackExample , zijn de functies als volgt:

Duw


// pushing integers onto the Stack
    stackExample.push(5);
    stackExample.push(10);
Op dit punt gaan we de andere functies laten zien alsof we deze twee gehele getallen elke keer naar het Java-stackvoorbeeld hebben gepusht.

Knal


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

10
5

Is leeg

Stel nu dat u alle elementen uit een stapel wilt verwijderen , maar niet zeker weet hoeveel elementen er zijn. U kunt de functie Boolean.isEmpty() combineren met een while-lus die vooraf is gegaan om alle elementen uit de stapel te halen . Kijk hoe deze java-stackimplementatie wordt uitgevoerd.

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

10
5

Kijkje

We kunnen .peek() gebruiken als stapelimplementatie in Java om het volgende item op de stapel te bekijken zonder het te verwijderen.

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

10
Als we de stapel openen en afdrukken , zal het 10 en 5 retourneren omdat de 10 nog steeds op de stapel staat. We hebben er alleen naar gekeken, we hebben het niet verwijderd met de pop-functie. De peek-functie is een geweldig hulpmiddel voor Stack- programma's in Java.

Zoekopdracht

Als we een specifiek element willen vinden, gebruikt de stacks-implementatie in Java .search(e); om het te vinden.

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

2
Onthoud dat dit komt omdat we vanaf de bovenkant van de Stack tellen en Java Stack begint bij 1, niet bij 0 zoals een Array . Dus, kijkend naar de stapel, is het (10) --> (5), en 5 staat op nummer 2. Als u een element probeert te vinden dat niet in de stapel zit , krijgt u een -1 als uitvoer.

herhalen

Wanneer u met een verzameling werkt, kan het voorkomen dat u naar meerdere elementen moet zoeken. Om complexiteit te besparen en meerdere keren door de stapel te moeten zoeken , kunt u iteratie gebruiken. Omdat Stack in Java de klasse List uitbreidt , zijn er verschillende iteratiemogelijkheden. Een van de gemakkelijkste is om gewoon de ListIterator- functie te gebruiken. ListIterator is leuk omdat je hiermee een stapel van boven naar beneden of van beneden naar boven kunt doorlopen met .hasPrevious() of .hasNext() . Zo ziet het eruit:

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

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

10
5
Houd er rekening mee dat wanneer u Stack s in Java herhaalt , u er geen elementen in verwijdert. Itereren stelt je in wezen in staat om elk element in de stapel op volgorde te bekijken. Wanneer u dit doet, kunt u locaties zoeken waar bepaalde elementen zijn en deze vervolgens doorlopen en manipuleren. U kunt ze indien nodig tellen, verwijderen of zelfs wijzigen.
Opmerkingen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION