The zásobník je lineární datová struktura, která se používá k ukládání kolekce objektů. Je to založeno na Last-In-First-Out (LIFO). Kolekce Java framework poskytuje mnoho rozhraní a tříd pro ukládání kolekce objektů. Jedním z nich je Třída zásobníku který poskytuje různé operace, jako je push, pop, search atd.
V této části budeme diskutovat o Třída Java Stack , své metody, a nářadí datová struktura zásobníku v a Java program . Než se však přesunete do třídy Java Stack, získejte rychlý přehled o tom, jak zásobník funguje.
Struktura dat zásobníku má dvě nejdůležitější operace, které jsou TAM a pop . Operace push vloží prvek do stohu a operace pop odebere prvek z vrcholu stohu. Podívejme se, jak fungují na zásobníku.
Zatlačte 20, 13, 89, 90, 11, 45, 18, respektive do zásobníku.
Odeberme (vyskočí) 18, 45 a 11 ze zásobníku.
Prázdný zásobník: Pokud zásobník neobsahuje žádný prvek, je znám jako an prázdný zásobník . Když je zásobník prázdný, hodnota horní proměnné je -1.
Když zatlačíme prvek do zásobníku, vršek je zvýšil o 1 . Na následujícím obrázku
- Stiskněte 12, nahoře = 0
- Stiskněte 6, nahoře=1
- Stiskněte 9, nahoře=2
Když vyjmeme prvek ze zásobníku, hodnota top je snížil o 1 . Na následujícím obrázku jsme zobrazili 9.
Následující tabulka ukazuje různé hodnoty vrcholu.
Třída Java Stack
v Javě, Zásobník je třída, která spadá pod rámec Collection, který rozšiřuje Vektor třída. Také implementuje rozhraní Seznam, kolekce, iterovatelný, klonovatelný, serializovatelný. Představuje LIFO zásobník objektů. Před použitím třídy Stack musíme importovatjava.utilbalík. Třída zásobníku uspořádaná v hierarchii rámce Collections, jak je znázorněno níže.
Konstruktor třídy zásobníku
Třída Stack obsahuje pouze výchozí konstruktor čímž vznikne prázdný zásobník.
public Stack()
Vytvoření zásobníku
Pokud chceme vytvořit zásobník, nejprve importujte souborjava.utilbalíček a vytvořte objekt třídy Stack.
Stack stk = new Stack();
Nebo
Stack stk = new Stack();
Kde typ označuje typ zásobníku, jako je Integer, String atd.
Metody třídy Stack
Na zásobníku můžeme provádět operace push, pop, peek a search. Třída Java Stack poskytuje hlavně pět metod k provádění těchto operací. Spolu s tím také poskytuje všechny metody Java Vector třída .
Metoda | Modifikátor a typ | Popis metody |
---|---|---|
prázdný() | booleovský | Metoda kontroluje, zda je zásobník prázdný nebo ne. |
push (položka E) | A | Metoda vloží (vloží) prvek na vrchol zásobníku. |
pop() | A | Metoda odebere prvek z horní části zásobníku a vrátí stejný prvek, jako je hodnota této funkce. |
nahlédnout () | A | Metoda se dívá na horní prvek zásobníku, aniž by jej odstranil. |
hledat (objekt o) | int | Metoda prohledá zadaný objekt a vrátí polohu objektu. |
Metoda Stack Class empty().
The prázdný() metoda třídy Stack zkontrolujte, zda je zásobník prázdný nebo ne. Pokud je zásobník prázdný, vrátí hodnotu true, jinak vrátí hodnotu false. Můžeme také použít metodu isEmpty() třídy Vector .
Syntax
public boolean empty()
Vrácení: Metoda vrací true, pokud je zásobník prázdný, jinak vrací false.
V následujícím příkladu jsme vytvořili instanci třídy Stack. Poté jsme metodu empty() vyvolali dvakrát. Poprvé se vrací skutečný protože jsme do zásobníku nevložili žádný prvek. Poté jsme prvky vložili do zásobníku. Opět jsme vyvolali metodu empty(), která vrací Nepravdivé protože zásobník není prázdný.
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ýstup:
Is the stack empty? true Elements in Stack: [78, 113, 90, 120] Is the stack empty? false
Metoda push() třídy zásobníku
Metoda vloží položku na vrchol zásobníku. Funguje stejně jako metoda addElement(item) třídy Vector. Předá parametr položka k zasunutí do stohu.
Syntax
public E push(E item)
Parametr: Položka, která se má vytlačit na horní část stohu.
Vrácení: Metoda vrací argument, který jsme předali jako parametr.
Metoda Stack Class pop().
Metoda odstraní objekt v horní části zásobníku a vrátí stejný objekt. To hází EmptyStackException pokud je zásobník prázdný.
Syntax
hashtable java
public E pop()
Vrácení: Vrací objekt, který je v horní části zásobníku.
Pojďme implementovat zásobník v programu Java a provádět operace 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ýstup:
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]
Metoda peek() třídy zásobníku
Dívá se na prvek, který je v zásobníku nahoře. To také hází EmptyStackException pokud je zásobník prázdný.
Syntax
public E peek()
Vrácení: Vrátí horní prvky zásobníku.
Podívejme se na příklad metody 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ýstup:
Stack: [Apple, Grapes, Mango, Orange] Element at the top of the stack: Orange
Metoda Stack Class search().
Metoda prohledává objekt v zásobníku shora. Analyzuje parametr, který chceme hledat. Vrátí umístění objektu v zásobníku založené na 1. Nejvyšší objekt v hromádce je uvažován ve vzdálenosti 1.
Předpokládejme, že o je objekt v zásobníku, který chceme hledat. Metoda vrací vzdálenost od vrcholu zásobníku výskytu nejbližšího vrcholu zásobníku. Používá rovná se() metoda pro hledání objektu v zásobníku.
Syntax
public int search(Object o)
Parametr: o je požadovaný objekt, který má být prohledán.
Vrácení: Vrátí umístění objektu z horní části zásobníku. Pokud vrátí -1, znamená to, že objekt není v zásobníku.
Podívejme se na příklad metody 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); } }
Operace Java Stack
Velikost zásobníku
Velikost zásobníku můžeme také zjistit pomocí metody size() třídy Vector . Vrací celkový počet prvků (velikost zásobníku) v zásobníku.
Syntax
public int size()
Podívejme se na příklad metody size() třídy 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ýstup:
Is the stack empty or not? false The stack size is: 5
Iterovat prvky
Iterovat znamená načíst prvky zásobníku. Prvky zásobníku můžeme načíst třemi různými způsoby:
- Použitím iterátor() Metoda
- Použitím pro každého() Metoda
- Použitím listIterator() Metoda
Použití metody iterator().
Je to metoda rozhraní Iterator. Vrací iterátor nad prvky v zásobníku. Před použitím metody iterator() naimportujte souborjava.util.Iteratorbalík.
Syntax
Iterator iterator()
Proveďme iteraci nad zásobníkem.
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ýstup:
BMW Audi Ferrari Bugatti Jaguar
Použití metody forEach().
Java poskytuje metodu forEach() pro iteraci prvků. Metoda je definována v Iterovatelné a Proud rozhraní.
Syntax
default void forEach(Consumeraction)
Pojďme iterovat přes zásobník pomocí metody 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ýstup:
Iteration over the stack using forEach() Method: 119 203 988
Použití metody listIterator().
Tato metoda vrací iterátor seznamu nad prvky ve zmíněném seznamu (v pořadí), počínaje od zadané pozice v seznamu. Iteruje zásobník shora dolů.
generovat náhodné číslo v java
Syntax
ListIterator listIterator(int index)
Parametr: Metoda analyzuje parametr s názvem index.
Vrácení: Tato metoda vrací iterátor seznamu nad prvky v pořadí.
Výjimka: To hází IndexOutOfBoundsException pokud je index mimo rozsah.
Pojďme iterovat přes zásobník pomocí metody 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ýstup:
Iteration over the Stack from top to bottom: 988 203 119