Stacken i Java är en datastruktur, ungefär som en kö, array, länkad lista eller träd . Där den skiljer sig från de andra är att Java Stack är baserad på Last In, First Out (LIFO) principen. Vad detta betyder är att när du använder de två kommandona för att lägga till och ta bort ett element från stacken, kommer det första du tar bort alltid att vara det sista du lade till. Låt oss ta en närmare titt på Java Stack Class
Utforska Java Stack Class
Java Stack Class är en förlängning av Vector -klassen, som i sig utökar List- klassen. Eftersom vektorer är föränderliga och kan växa och krympa med kraven från elementen inuti, kan Stack s också ändra storlek på begäran. Utvidgningen av klassen Vector lägger till fem operationer som omvandlar en vektor till en stack . Dessa fem operationer är:- .push(E objekt) – placerar ett element på toppen av stapeln
- .pop() – tar bort elementet överst i stacken och returnerar det som funktionens värde
- .peek() – tittar på elementet överst i stacken utan att ta bort det
- .empty() – boolesk funktion för att testa om stacken är tom eller inte. Returnerar en 0 eller 1.
- .search(Object o) – Letar efter o och returnerar dess position. Värdet är 1-baserat, inte 0-baserat
Exempel på kodning av en Java-stack
Nu när vi känner till funktionerna för Stack , låt oss koda ett exempel på Java-stack. Stackar är mycket användbara för att hantera data som måste lagras tillfälligt och snabbt hämtas. Eftersom Stacken är LIFO, är den exceptionellt användbar för nodpassering när man utforskar en träddatastruktur. Innan vi går in på allt detta, låt oss skapa en grundläggande stack. Koden för att implementera en stack är följande:
import java.util.*;
class Main {
public static void main(String[] args) {
Stack<Integer> stackExample = new Stack<Integer>();
Det är allt du behöver göra för att skapa en tom stack . Du kan också bara deklarera det helt enkelt utan att deklarera en datatyp genom att använda:
Stack example = new Stack();
Kom ihåg att eftersom Stack s är föränderliga, när vi trycker element på stapeln, kommer den automatiskt att justeras i storlek. Låt oss nu titta på hur man använder Stack- funktionerna.
Java Stack Implementering
Låt oss titta på hur man använder de fem metoder som vi undersökte kort tidigare. Java-stackimplementering är lätt att komma ihåg om du tänker på det som en stapel med plattor. Du lägger tallrikar på högen, men för att få en tallrik går du inte till botten, du får en från toppen. Den sista du tar på dig är den första du tar av dig. För att utöka vårt tidigare exempel med stackExample , är funktionerna följande:Skjuta på
// pushing integers onto the Stack
stackExample.push(5);
stackExample.push(10);
Vid det här laget kommer vi att visa de andra funktionerna som om vi har tryckt in dessa två heltal på Java-stackexemplet varje gång.
Pop
//popping integers off of the Stack
System.out.println(stackExample.pop());
System.out.println(stackExample.pop());
Produktion:
10
5
Är tom
Låt oss nu säga att du vill ta bort alla element från en stack men du är inte säker på hur många element det finns. Du kan kombinera Boolean.isEmpty() -funktionen med en precondition while loop för att poppa alla element från Stacken . Titta på hur denna java-stackimplementering är gjord.
while(!stackExample.isEmpty()) {
System.out.println(stackExample.pop());
}
Produktion
10
5
Titt
Vi kan använda .peek() som stackimplementering i Java för att ta en titt på nästa objekt i Stacken utan att ta bort det.
System.out.println(stackExample.peek());
Produktion
10
Om vi poppar och skriver ut stacken , kommer den att returnera 10 och 5 eftersom 10:an fortfarande finns i stapeln. Vi tittade bara på den, vi tog inte bort den med popfunktionen. Peek-funktionen är ett utmärkt verktyg för Stack s i java.
Sök
Om vi vill hitta ett specifikt element använder stackimplementeringen i Java .search(e); att hitta den.
System.out.println(stackExample.search(5));
Produktion
2
Kom ihåg att detta beror på att vi räknar från toppen av Stacken och Java Stack börjar på 1, inte 0 som en Array . Så när man tittar på högen är den (10) --> (5), och 5 är på plats nummer 2. Om du försöker hitta ett element som inte finns i Stacken får du en -1 som utdata.
Itererande
När du arbetar med en samling kan det finnas tillfällen då du behöver leta efter flera element. För att spara komplexitet och behöva söka igenom stacken flera gånger kan du använda iteration. Eftersom Stack i Java utökar klassen List finns det flera alternativ för iterering. En av de enklaste är att bara använda ListIterator- funktionen. ListIterator är trevlig genom att den låter dig gå igenom en stack från topp till botten eller från botten till topp med .hasPrevious() eller .hasNext() . Så här ser det ut:
ListIterator<Integer> exampleIterator = stackExample.listIterator(stackExample.size());
while (exampleIterator.hasPrevious()) {
int iteration = exampleIterator.previous();
System.out.println(iteration);
}
Produktion
10
5
Tänk på att när du itererar genom Stack s i Java tar du inte bort några element i den. Iteration låter dig i princip kika på varje element i stapeln i ordning. När du gör detta kan du leta efter platser där vissa element finns och sedan gå igenom och manipulera dem. Du kan räkna, ta bort eller till och med ändra dem om det behövs.
GO TO FULL VERSION