logo

Java Stack

The stoh je lineárna dátová štruktúra, ktorá sa používa na uloženie kolekcie objektov. Je založená na Last-In-First-Out (LIFO). Kolekcia Java framework poskytuje mnoho rozhraní a tried na uloženie kolekcie objektov. Jedným z nich je Trieda zásobníka ktorý poskytuje rôzne operácie, ako je push, pop, search atď.

V tejto časti budeme diskutovať o Trieda Java Stack , jeho metódy, a realizovať dátová štruktúra zásobníka v a Java program . Pred prechodom na triedu Java Stack si však urobte rýchly prehľad o tom, ako zásobník funguje.

Dátová štruktúra zásobníka má dve najdôležitejšie operácie, ktoré sú TAM a pop . Operácia push vloží prvok do stohu a operácia vysunutia odstráni prvok z vrcholu stohu. Pozrime sa, ako fungujú na zásobníku.

Java Stack

Do zásobníka vložíme 20, 13, 89, 90, 11, 45, 18.

Java Stack

Odstránime (vyskočí) 18, 45 a 11 zo zásobníka.

Java Stack

Prázdny zásobník: Ak zásobník nemá žiadny prvok, je známy ako an prázdny zásobník . Keď je zásobník prázdny, hodnota najvyššej premennej je -1.

Java Stack

Keď zatlačíme prvok do stohu, vrch je zvýšená o 1 . Na nasledujúcom obrázku

  • Stlačte 12, horná časť = 0
  • Stlačte 6, horná časť = 1
  • Stlačte 9, horná časť = 2
Java Stack

Keď vyberieme prvok zo zásobníka, hodnota top je znížil o 1 . Na nasledujúcom obrázku sme zobrazili 9.

Java Stack

Nasledujúca tabuľka zobrazuje rôzne hodnoty hornej časti.

Java Stack

Trieda Java Stack

v Jave Stoh je trieda, ktorá spadá pod rámec Collection, ktorý rozširuje Vektor trieda. Tiež implementuje rozhrania Zoznam, zbierka, opakovateľné, klonovateľné, serializovateľné. Predstavuje LIFO zásobník objektov. Pred použitím triedy Stack musíme importovaťjava.utilbalík. Trieda zásobníka usporiadaná v hierarchii rámca kolekcií, ako je uvedené nižšie.

Java Stack

Konštruktor triedy zásobníkov

Trieda Stack obsahuje iba predvolený konštruktor čím sa vytvorí prázdny zásobník.

 public Stack() 

Vytvorenie zásobníka

Ak chceme vytvoriť zásobník, najprv naimportujeme súborjava.utilbalík a vytvorte objekt triedy Stack.

 Stack stk = new Stack(); 

Alebo

 Stack stk = new Stack(); 

Kde typ označuje typ zásobníka, ako je celé číslo, reťazec atď.

Metódy triedy zásobníkov

Na zásobníku môžeme vykonávať operácie push, pop, peek a search. Trieda Java Stack poskytuje hlavne päť metód na vykonávanie týchto operácií. Spolu s tým tiež poskytuje všetky metódy Java Vector trieda .

Metóda Modifikátor a typ Popis metódy
prázdne () boolovská hodnota Metóda kontroluje, či je zásobník prázdny alebo nie.
push (E položka) A Metóda vloží (vloží) prvok na vrch zásobníka.
pop() A Metóda odstráni prvok z hornej časti zásobníka a vráti rovnaký prvok, ako je hodnota tejto funkcie.
nahliadnuť () A Metóda sa pozerá na horný prvok zásobníka bez toho, aby ho odstránila.
hľadať (objekt o) int Metóda vyhľadá zadaný objekt a vráti polohu objektu.

Metóda Stack Class empty().

The prázdne () metóda triedy Stack skontrolujte, či je zásobník prázdny alebo nie. Ak je zásobník prázdny, vráti hodnotu true, inak vráti hodnotu false. Môžeme použiť aj metódu isEmpty() triedy Vector .

Syntax

prepísanie metódy v jazyku Java
 public boolean empty() 

Vrátenie: Metóda vráti hodnotu true, ak je zásobník prázdny, inak vráti hodnotu false.

V nasledujúcom príklade sme vytvorili inštanciu triedy Stack. Potom sme metódu empty() vyvolali dvakrát. Prvýkrát sa vracia pravda pretože sme do zásobníka nevložili žiadny prvok. Potom sme prvky vložili do stohu. Opäť sme vyvolali metódu empty(), ktorá vracia falošný pretože zásobník nie je prázdny.

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); } } 

Výkon:

 Is the stack empty? true Elements in Stack: [78, 113, 90, 120] Is the stack empty? false 

Metóda push() triedy zásobníka

Metóda vloží položku na vrch zásobníka. Funguje rovnako ako metóda addElement(item) triedy Vector. Prechádza parametrom položka na zatlačenie do stohu.

Syntax

 public E push(E item) 

Parameter: Položka, ktorá sa má vytlačiť na vrch stohu.

referenčná premenná v jazyku Java

Vrátenie: Metóda vracia argument, ktorý sme odovzdali ako parameter.

Stack Class metóda pop().

Metóda odstráni objekt v hornej časti zásobníka a vráti rovnaký objekt. To hádže EmptyStackException ak je zásobník prázdny.

Syntax

 public E pop() 

Vrátenie: Vracia objekt, ktorý je v hornej časti zásobníka.

Implementujme zásobník v programe Java a vykonajte operácie push a pop.

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); } } 

Výkon:

 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() metóda

Pozerá sa na prvok, ktorý je v zásobníku navrchu. Tiež hádže EmptyStackException ak je zásobník prázdny.

Syntax

 public E peek() 

Vrátenie: Vracia horné prvky zásobníka.

Pozrime sa na príklad metódy peek().

StackPeekMethodExample.java

 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); } } 

Výkon:

 Stack: [Apple, Grapes, Mango, Orange] Element at the top of the stack: Orange 

Metóda prehľadáva objekt v zásobníku zhora. Analyzuje parameter, ktorý chceme hľadať. Vráti polohu objektu v zásobníku založenú na 1. Najvyšší objekt v zásobníku je považovaný vo vzdialenosti 1.

harald baldr

Predpokladajme, že o je objekt v zásobníku, ktorý chceme hľadať. Metóda vráti vzdialenosť od vrcholu zásobníka výskytu najbližšie k vrcholu zásobníka. Používa sa rovná sa() metóda na vyhľadávanie objektu v zásobníku.

Syntax

 public int search(Object o) 

Parameter: o je požadovaný objekt, ktorý sa má hľadať.

Vrátenie: Vracia umiestnenie objektu z hornej časti zásobníka. Ak vráti -1, znamená to, že objekt nie je v zásobníku.

Pozrime sa na príklad metódy search().

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); } } 

Operácie Java Stack

Veľkosť zásobníka

Veľkosť zásobníka môžeme zistiť aj pomocou metódy size() triedy Vector . Vráti celkový počet prvkov (veľkosť zásobníka) v zásobníku.

Syntax

 public int size() 

Pozrime sa na príklad metódy size() triedy Vector.

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); } } 

Výkon:

 Is the stack empty or not? false The stack size is: 5 

Iterovať prvky

Iterovať znamená získať prvky zásobníka. Prvky zásobníka môžeme načítať tromi rôznymi spôsobmi:

  • Použitím iterátor() Metóda
  • Použitím pre každý() Metóda
  • Použitím listIterator() Metóda

Použitie metódy iterator().

Je to metóda rozhrania Iterator. Vracia iterátor nad prvkami v zásobníku. Pred použitím metódy iterator() naimportujte súborjava.util.Iteratorbalík.

Syntax

 Iterator iterator() 

Vykonajte iteráciu nad zásobníkom.

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); } } } 

Výkon:

excel odstrániť prvý znak
 BMW Audi Ferrari Bugatti Jaguar 

Použitie metódy forEach().

Java poskytuje metódu forEach() na iteráciu prvkov. Metóda je definovaná v Iterovateľné a Prúd rozhranie.

Syntax

 default void forEach(Consumeraction) 

Prejdime cez zásobník pomocou metódy forEach().

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); }); } } 

Výkon:

 Iteration over the stack using forEach() Method: 119 203 988 

Použitie metódy listIterator().

Táto metóda vracia iterátor zoznamu nad prvkami v uvedenom zozname (v poradí), začínajúc na zadanej pozícii v zozname. Iteruje zásobník zhora nadol.

Syntax

 ListIterator listIterator(int index) 

Parameter: Metóda analyzuje parameter s názvom index.

Vrátenie: Táto metóda vracia iterátor zoznamu nad prvkami v poradí.

Výnimka: To hádže IndexOutOfBoundsException ak je index mimo rozsahu.

Iterujeme cez zásobník pomocou metódy listIterator().

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); } } } 

Výkon:

 Iteration over the Stack from top to bottom: 988 203 119