Det stak er en lineær datastruktur, der bruges til at lagre samlingen af objekter. Det er baseret på Sidst-ind-først-ud (LIFO). Java samling framework giver mange grænseflader og klasser til at gemme samlingen af objekter. En af dem er Stakklasse der giver forskellige operationer såsom push, pop, søgning osv.
I dette afsnit vil vi diskutere Java Stack klasse , dens metoder, og gennemføre stakdatastrukturen i en Java program . Men før du flytter til Java Stack-klassen, har du et hurtigt overblik over, hvordan stakken fungerer.
Stakdatastrukturen har de to vigtigste operationer, der er skubbe og pop . Trykoperationen indsætter et element i stakken, og pop-operationen fjerner et element fra toppen af stakken. Lad os se, hvordan de fungerer på stakken.
Lad os skubbe henholdsvis 20, 13, 89, 90, 11, 45, 18 ind i stakken.
Lad os fjerne (pop) 18, 45 og 11 fra stakken.
Tom stak: Hvis stakken ikke har noget element er kendt som en tom stak . Når stakken er tom, er værdien af den øverste variabel -1.
Når vi skubber et element ind i stakken er toppen øget med 1 . I den følgende figur,
- Tryk 12, top=0
- Tryk 6, top=1
- Tryk 9, top=2
Når vi springer et element fra stakken, er værdien af top faldet med 1 . I den følgende figur har vi vist 9.
Følgende tabel viser de forskellige værdier af toppen.
Java Stack klasse
I Java, Stak er en klasse, der falder ind under samlingsrammen, der udvider Vektor klasse. Det implementerer også grænseflader Liste, Samling, Gentagelig, Klonbar, Serialiserbar. Det repræsenterer LIFO-stakken af objekter. Før vi bruger Stack-klassen, skal vi importerejava.utilpakke. Stakklassen arrangeret i samlingsrammehierarkiet, som vist nedenfor.
Stakklassekonstruktør
Stack-klassen indeholder kun standard konstruktør der skaber en tom stak.
public Stack()
Oprettelse af en stak
Hvis vi vil oprette en stak, skal du først importerejava.utilpakke og opret et objekt af Stack-klassen.
Stack stk = new Stack();
Eller
ubuntu build vigtigt
Stack stk = new Stack();
Hvor type angiver typen af stak som heltal, streng osv.
Metoder i stakklassen
Vi kan udføre push, pop, kig og søgeoperationer på stakken. Java Stack-klassen giver hovedsageligt fem metoder til at udføre disse operationer. Sammen med dette giver det også alle metoderne til Java Vector klasse .
Metode | Modifikator og type | Metodebeskrivelse |
---|---|---|
tom() | boolesk | Metoden kontrollerer, at stakken er tom eller ej. |
push (E element) | OG | Metoden skubber (indsætter) et element på toppen af stakken. |
pop() | OG | Metoden fjerner et element fra toppen af stakken og returnerer det samme element som værdien af denne funktion. |
kig() | OG | Metoden ser på det øverste element af stakken uden at fjerne det. |
søg (Objekt o) | int | Metoden søger i det angivne objekt og returnerer objektets position. |
Stack Class empty() Metode
Det tom() metoden for Stack-klassen kontroller, at stakken er tom eller ej. Hvis stakken er tom, returnerer den sand, ellers returnerer den falsk. Vi kan også bruge metoden isEmpty() fra Vector-klassen.
Syntaks
public boolean empty()
Vender tilbage: Metoden returnerer sand, hvis stakken er tom, ellers returnerer falsk.
I det følgende eksempel har vi oprettet en forekomst af Stack-klassen. Derefter har vi aktiveret empty() metoden to gange. Første gang den vender tilbage rigtigt fordi vi ikke har skubbet noget element ind i stakken. Herefter har vi skubbet elementer ind i stakken. Igen har vi aktiveret den tomme() metode, der returnerer falsk fordi stakken ikke er tom.
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); } }
Produktion:
Is the stack empty? true Elements in Stack: [78, 113, 90, 120] Is the stack empty? false
Stack Class push() metode
Metoden indsætter et element på toppen af stakken. Det virker på samme måde som metoden addElement(item) i Vector-klassen. Den passerer en parameter vare skal skubbes ind i stakken.
c++ int til streng
Syntaks
public E push(E item)
Parameter: Et emne, der skal skubbes op på toppen af stakken.
Vender tilbage: Metoden returnerer argumentet, som vi har sendt som parameter.
Stack Class pop() metode
Metoden fjerner et objekt øverst i stakken og returnerer det samme objekt. Det kaster EmptyStackException hvis stakken er tom.
Syntaks
public E pop()
Vender tilbage: Det returnerer et objekt, der er øverst i stakken.
Lad os implementere stakken i et Java-program og udføre push- og pop-operationer.
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); } }
Produktion:
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() metode
Den ser på det element, der er øverst i stakken. Den kaster også EmptyStackException hvis stakken er tom.
Syntaks
public E peek()
Vender tilbage: Det returnerer de øverste elementer i stakken.
Lad os se et eksempel på peek()-metoden.
StackPeekMethodExample.java
system.out.println
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); } }
Produktion:
Stack: [Apple, Grapes, Mango, Orange] Element at the top of the stack: Orange
Stack Class search() metode
Metoden søger efter objektet i stakken fra toppen. Den analyserer en parameter, som vi vil søge efter. Det returnerer den 1-baserede placering af objektet i stakken. Det øverste objekt i stakken betragtes i afstand 1.
Antag, at o er et objekt i stakken, som vi vil søge efter. Metoden returnerer afstanden fra toppen af stakken af forekomsten nærmest toppen af stakken. Det bruger lige med() metode til at søge efter et objekt i stakken.
Syntaks
public int search(Object o)
Parameter: o er det ønskede objekt, der skal søges i.
Vender tilbage: Det returnerer objektets placering fra toppen af stakken. Hvis det returnerer -1, betyder det, at objektet ikke er på stakken.
Lad os se et eksempel på search() metoden.
npm cache ryddes
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 Operations
Størrelse på stakken
Vi kan også finde størrelsen på stakken ved hjælp af size()-metoden i Vector-klassen. Det returnerer det samlede antal elementer (størrelsen af stakken) i stakken.
Syntaks
public int size()
Lad os se et eksempel på size()-metoden i Vector-klassen.
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); } }
Produktion:
Is the stack empty or not? false The stack size is: 5
Gentag elementer
Iterate betyder at hente elementerne i stakken. Vi kan hente elementer af stakken ved hjælp af tre forskellige metoder er som følger:
- Ved brug af iterator() Metode
- Ved brug af for hver() Metode
- Ved brug af listIterator() Metode
Brug af iterator()-metoden
Det er metoden til Iterator-grænsefladen. Det returnerer en iterator over elementerne i stakken. Før du bruger iterator()-metoden, skal du importerejava.util.Iteratorpakke.
Syntaks
Iterator iterator()
Lad os udføre en iteration over stakken.
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); } } }
Produktion:
BMW Audi Ferrari Bugatti Jaguar
Brug af forEach()-metoden
Java giver en forEach()-metode til at iterere over elementerne. Metoden er defineret i Iterable og Strøm interface.
Syntaks
default void forEach(Consumeraction)
Lad os iterere over stakken ved hjælp af forEach()-metoden.
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); }); } }
Produktion:
Iteration over the stack using forEach() Method: 119 203 988
Brug af listIterator()-metoden
Denne metode returnerer en listeiterator over elementerne i den nævnte liste (i rækkefølge), startende ved den angivne position på listen. Den gentager stakken fra top til bund.
latex tekststørrelser
Syntaks
ListIterator listIterator(int index)
Parameter: Metoden analyserer en parameter med navnet indeks.
Vender tilbage: Denne metode returnerer en listeiterator over elementerne i rækkefølge.
Undtagelse: Det kaster IndexOutOfBoundsException hvis indekset er uden for rækkevidde.
Lad os iterere over stakken ved hjælp af listIterator()-metoden.
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); } } }
Produktion:
Iteration over the Stack from top to bottom: 988 203 119