logo

Java stak

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.

Java stak

Lad os skubbe henholdsvis 20, 13, 89, 90, 11, 45, 18 ind i stakken.

Java stak

Lad os fjerne (pop) 18, 45 og 11 fra stakken.

Java stak

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.

Java stak

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
Java stak

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.

Java stak

Følgende tabel viser de forskellige værdier af toppen.

Java stak

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.

Java stak

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 

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