logo

Stack Class v jazyku Java

Java Kolekčný rámec poskytuje triedu Stack, ktorá modeluje a implementuje a Nižšie uvedený diagram ukazuje hierarchia triedy Stack :

Stack Class v jazyku Java



Trieda podporuje jednu predvolený konštruktor Stoh() na ktorý je zvyknutý vytvorte prázdny zásobník .

Vyhlásenie:

public class Stack extends Vector>

Všetky implementované rozhrania:

Ako vytvoriť zásobník?

Aby sme vytvorili zásobník, musíme importovať java.util.stack balík a použite konštruktor Stack() tejto triedy. Nasledujúci príklad vytvorí prázdny zásobník.

Zásobník = nový Zásobník();

Tu je E typ objektu.

Príklad:

Java




// Java code for stack implementation> import> java.io.*;> import> java.util.*;> class> Test> {> >// Pushing element on the top of the stack> >static> void> stack_push(Stack stack)> >{> >for>(>int> i =>0>; i <>5>; i++)> >{> >stack.push(i);> >}> >}> > >// Popping element from the top of the stack> >static> void> stack_pop(Stack stack)> >{> >System.out.println(>'Pop Operation:'>);> >for>(>int> i =>0>; i <>5>; i++)> >{> >Integer y = (Integer) stack.pop();> >System.out.println(y);> >}> >}> >// Displaying element on the top of the stack> >static> void> stack_peek(Stack stack)> >{> >Integer element = (Integer) stack.peek();> >System.out.println(>'Element on stack top: '> + element);> >}> > >// Searching element in the stack> >static> void> stack_search(Stack stack,>int> element)> >{> >Integer pos = (Integer) stack.search(element);> >if>(pos == ->1>)> >System.out.println(>'Element not found'>);> >else> >System.out.println(>'Element is found at position: '> + pos);> >}> >public> static> void> main (String[] args)> >{> >Stack stack =>new> Stack();> >stack_push(stack);> >stack_pop(stack);> >stack_push(stack);> >stack_peek(stack);> >stack_search(stack,>2>);> >stack_search(stack,>6>);> >}> }>

selén

>

>

Výkon:

Pop Operation: 4 3 2 1 0 Element on stack top: 4 Element is found at position: 3 Element not found>

Vykonávanie rôznych operácií na triede Stack

1. Pridanie prvkov: Na pridanie prvku do zásobníka môžeme použiť metóda push(). . Toto TAM() operácie umiestnite prvok na vrch zásobníka.

Java




// Java program to add the> // elements in the stack> import> java.io.*;> import> java.util.*;> class> StackDemo {> > >// Main Method> >public> static> void> main(String[] args)> >{> >// Default initialization of Stack> >Stack stack1 =>new> Stack();> >// Initialization of Stack> >// using Generics> >Stack stack2 =>new> Stack();> >// pushing the elements> >stack1.push(>'4'>);> >stack1.push(>'All'>);> >stack1.push(>'Geeks'>);> >stack2.push(>'Geeks'>);> >stack2.push(>'For'>);> >stack2.push(>'Geeks'>);> >// Printing the Stack Elements> >System.out.println(stack1);> >System.out.println(stack2);> >}> }>

>

>

Výkon:

[4, All, Geeks] [Geeks, For, Geeks]>

2. Prístup k prvku: Na načítanie alebo načítanie prvého prvku zásobníka alebo prvku nachádzajúceho sa v hornej časti zásobníka môžeme použiť nahliadnuť () metóda. Získaný prvok sa neodstráni ani neodstráni zo zásobníka.

Java




// Java program to demonstrate the accessing> // of the elements from the stack> import> java.util.*;> import> java.io.*;> public> class> StackDemo {> >// Main Method> >public> static> void> main(String args[])> >{> >// Creating an empty Stack> >Stack stack =>new> Stack();> >// Use push() to add elements into the Stack> >stack.push(>'Welcome'>);> >stack.push(>'To'>);> >stack.push(>'Geeks'>);> >stack.push(>'For'>);> >stack.push(>'Geeks'>);> >// Displaying the Stack> >System.out.println(>'Initial Stack: '> + stack);> >// Fetching the element at the head of the Stack> >System.out.println(>'The element at the top of the'> >+>' stack is: '> + stack.peek());> >// Displaying the Stack after the Operation> >System.out.println(>'Final Stack: '> + stack);> >}> }>

porovnateľný reťazec

>

>

Výkon:

Initial Stack: [Welcome, To, Geeks, For, Geeks] The element at the top of the stack is: Geeks Final Stack: [Welcome, To, Geeks, For, Geeks]>

3. Odstránenie prvkov: Ak chcete vybrať prvok zo zásobníka, môžeme použiť pop() metóda. Prvok sa vysunie z hornej časti stohu a odstráni sa z neho.

Java




// Java program to demonstrate the removing> // of the elements from the stack> import> java.util.*;> import> java.io.*;> public> class> StackDemo {> >public> static> void> main(String args[])> >{> >// Creating an empty Stack> >Stack stack =>new> Stack();> >// Use add() method to add elements> >stack.push(>10>);> >stack.push(>15>);> >stack.push(>30>);> >stack.push(>20>);> >stack.push(>5>);> >// Displaying the Stack> >System.out.println(>'Initial Stack: '> + stack);> >// Removing elements using pop() method> >System.out.println(>'Popped element: '> >+ stack.pop());> >System.out.println(>'Popped element: '> >+ stack.pop());> >// Displaying the Stack after pop operation> >System.out.println(>'Stack after pop operation '> >+ stack);> >}> }>

>

>

Výkon:

Initial Stack: [10, 15, 30, 20, 5] Popped element: 5 Popped element: 20 Stack after pop operation [10, 15, 30]>

Príklad

V jazyku Java je trieda Stack podtriedou triedy Vector a predstavuje zásobník objektov typu last-in-first-out (LIFO). Rozširuje triedu Vector, aby umožnila jednoduchú implementáciu dátovej štruktúry zásobníka.

Tu je príklad toho, ako môžete použiť triedu Stack v jazyku Java:

Java




import> java.util.Stack;> public> class> StackExample {> >public> static> void> main(String[] args) {> >// Create a new stack> >Stack stack =>new> Stack();> >// Push elements onto the stack> >stack.push(>1>);> >stack.push(>2>);> >stack.push(>3>);> >stack.push(>4>);> >// Pop elements from the stack> >while>(!stack.isEmpty()) {> >System.out.println(stack.pop());> >}> >}> }>

>

>

Výkon

4 3 2 1>

V tomto príklade najprv importujeme triedu Stack z balíka java.util. Potom vytvoríme nový objekt Stack s názvom stack pomocou predvoleného konštruktora. Do zásobníka vtlačíme štyri celé čísla pomocou metódy push(). Potom vytiahneme prvky zo zásobníka pomocou metódy pop() vo vnútri cyklu while. Metóda isEmpty() sa používa na kontrolu, či je zásobník prázdny pred pokusom o vysunutie prvku.

Tento kód vytvorí zásobník celých čísel a vloží 4 celé čísla do zásobníka v poradí 1 -> 2 -> 3 -> 4. Potom vyberáme prvky zo zásobníka jeden po druhom pomocou metódy pop(), ktorá odstráni a vráti horný prvok stohu. Keďže zásobník sa riadi poradím LIFO (posledný dnu, prvý von), prvky sa vysunú v opačnom poradí pri vkladaní, výsledkom čoho je výstup zobrazený vyššie.

Trieda Stack poskytuje niekoľko ďalších metód na manipuláciu so zásobníkom, ako napríklad peek() na získanie vrchného prvku bez jeho odstránenia, search() na vyhľadanie prvku v zásobníku a vrátenie jeho polohy a size() na vrátenie aktuálneho prvku. veľkosť zásobníka. Trieda Stack tiež poskytuje niekoľko konštruktorov na vytvorenie zásobníka so špecifikovanou počiatočnou kapacitou alebo skopírovaním existujúceho zásobníka.

Metódy v triede zásobníka

METÓDA

POPIS

prázdne ()

Ak na vrchu zásobníka nič nie je, vráti hodnotu true. V opačnom prípade vráti hodnotu false.

nahliadnuť ()

Vráti prvok v hornej časti zásobníka, ale neodstráni ho.

pop()

Odstráni a vráti horný prvok zo stohu. Výnimka „EmptyStackException“

Výnimka sa vyvolá, ak zavoláme pop(), keď je vyvolávací zásobník prázdny.

push (prvok objektu)

Zatlačí prvok na vrch zásobníka.

hľadať (prvok objektu)

Určuje, či objekt existuje v zásobníku. Ak sa prvok nájde,

Vráti polohu prvku z hornej časti zásobníka. V opačnom prípade vráti -1.

jsp

Metódy zdedené z triedy java.util.Vector

METÓDA

POPIS

pridať (objekt objektu) Pripojí zadaný prvok na koniec tohto vektora.
add(int index, Object obj) Vloží zadaný prvok na zadanú pozíciu v tomto vektore.
addAll(Kolekcia c)

Pripojí všetky prvky v zadanej kolekcii na koniec tohto vektora,

v poradí, v akom ich vráti určený iterátor kolekcie.

addAll(int index, kolekcia c) Vloží všetky prvky v zadanej kolekcii do tohto vektora na zadanú pozíciu.
addElement(Object o) Pridá zadaný komponent na koniec tohto vektora a zväčší jeho veľkosť o jeden.
kapacita() Vráti aktuálnu kapacitu tohto vektora.
jasný() Odstráni všetky prvky z tohto vektora.
klon() Vráti klon tohto vektora.
obsahuje (Objekt o) Vráti hodnotu true, ak tento vektor obsahuje zadaný prvok.
obsahuje všetko (kolekcia c) Vráti hodnotu true, ak tento vektor obsahuje všetky prvky v zadanej kolekcii.
copyInto(Object []pole) Skopíruje komponenty tohto vektora do zadaného poľa.
elementAt(int index) Vráti komponent na zadanom indexe.
prvky() Vráti zoznam komponentov tohto vektora.
sureCapacity (int minCapacity)

Zvyšuje kapacitu tohto vektora, ak je to potrebné, aby sa zabezpečilo, že môže držať

aspoň počet komponentov určený argumentom minimálnej kapacity.

rovná sa() Porovná zadaný objekt s týmto vektorom na dosiahnutie rovnosti.
firstElement() Vráti prvú zložku (položku na indexe 0) tohto vektora.
získať (int index) Vráti prvok na zadanej pozícii v tomto vektore.
hashCode() Vráti hodnotu hash kódu pre tento vektor.
indexOf(Objekt o)

Vráti index prvého výskytu zadaného prvku v tomto vektore alebo -1

ak tento vektor neobsahuje prvok.

indexOf(Objekt o, int index) Vráti index prvého výskytu zadaného prvku v tomto vektore pri vyhľadávaní vpred z indexu alebo vráti hodnotu -1, ak sa prvok nenájde.
insertElementAt(Object o, int index) Vloží zadaný objekt ako komponent do tohto vektora na zadaný index.
je prázdny() Testuje, či tento vektor nemá žiadne zložky.
iterátor() Vráti iterátor nad prvkami v tomto zozname v správnom poradí.
lastElement() Vráti posledný komponent vektora.
lastIndexOf(Object o)

Vráti index posledného výskytu zadaného prvku v tomto vektore alebo -1

Ak tento vektor neobsahuje prvok.

lastIndexOf(Objekt o, int index)

Vráti index posledného výskytu zadaného prvku v tomto vektore,

vyhľadávanie späť z indexu alebo vráti -1, ak sa prvok nenájde.

listIterator() Vráti iterátor zoznamu nad prvkami v tomto zozname (v správnom poradí).
listIterator(int index)

Vráti iterátor zoznamu nad prvkami v tomto zozname (v správnom poradí),

počnúc od zadanej pozície v zozname.

odstrániť (int index) Odstráni prvok na zadanej pozícii v tomto vektore.
odstrániť (Objekt o) Odstráni prvý výskyt zadaného prvku v tomto vektore Ak Vektor prvok neobsahuje, zostane nezmenený.
odstrániť všetko (kolekcia c) Odstráni z tohto vektora všetky jeho prvky, ktoré sú obsiahnuté v zadanej kolekcii.
removeAllElements() Odstráni všetky komponenty z tohto vektora a nastaví jeho veľkosť na nulu.
removeElement(Object o) Odstráni prvý (najnižšie indexovaný) výskyt argumentu z tohto vektora.
removeElementAt(int index) Vymaže komponent v zadanom indexe.
removeRange(int fromIndex, int toIndex) Odstráni z tohto zoznamu všetky prvky, ktorých index je medzi fromIndex, vrátane, a toIndex, bez.
ponechať všetko (kolekcia c) Zachová iba prvky v tomto vektore, ktoré sú obsiahnuté v zadanej kolekcii.
set(int index, Object o) Nahradí prvok na zadanej pozícii v tomto vektore zadaným prvkom.
setElementAt(Object o, int index) Nastaví komponent na zadaný index tohto vektora ako zadaný objekt.
setSize (int newSize) Nastaví veľkosť tohto vektora.
veľkosť () Vráti počet komponentov v tomto vektore.
subList(int fromIndex, int toIndex) Vráti zobrazenie časti tohto zoznamu medzi fromIndex, vrátane, a toIndex, bez.
toArray() Vráti pole obsahujúce všetky prvky tohto vektora v správnom poradí.
toArray(Object []pole)

Vráti pole obsahujúce všetky prvky v tomto vektore v správnom poradí; čas spustenia

typ vráteného poľa je typ zadaného poľa.

natiahnuť() Vráti reťazcovú reprezentáciu tohto vektora obsahujúcu reťazcovú reprezentáciu každého prvku.
trimToSize() Skráti kapacitu tohto vektora na aktuálnu veľkosť vektora.

Uprednostnite používanie O čom cez zásobník -:

Trieda Stack v jazyku Java je starou triedou a dedí z Vektor v jazyku Java . Je to trieda bezpečná pre vlákna, a preto zahŕňa réžiu, keď nepotrebujeme bezpečnosť vlákien. Odporúča sa použiť ArrayDeque na implementáciu zásobníka, pretože je efektívnejšia v prostredí s jedným vláknom.

Java




char na reťazec v jazyku Java

// A Java Program to show implementation> // of Stack using ArrayDeque> import> java.util.*;> class> GFG {> >public> static> void> main (String[] args) {> >Deque stack =>new> ArrayDeque();> >stack.push(>'A'>);> >stack.push(>'B'>);> >System.out.println(stack.peek());> >System.out.println(stack.pop());> >}> }>

>

>

Výkon:

B B>

Ďalším dôvodom, prečo používať Deque pred Stackom, je, že Deque má schopnosť používať streamy konvertované na zoznam pri zachovaní aplikovaného konceptu LIFO, zatiaľ čo Stack nie.

Java




import> java.util.*;> import> java.util.stream.Collectors;> class> GFG {> >public> static> void> main (String[] args) {> > >Stack stack =>new> Stack();> >Deque deque =>new> ArrayDeque();> >stack.push(>1>);>//1 is the top> >deque.push(>1>);>//1 is the top> >stack.push(>2>);>//2 is the top> >deque.push(>2>);>//2 is the top> >List list1 = stack.stream().collect(Collectors.toList());>//[1,2]> >System.out.println(>'Using Stack -'>);> >for>(>int> i =>0>; i System.out.print(list1.get(i) + ' ' ); } System.out.println(); List list2 = deque.stream().collect(Collectors.toList());//[2,1] System.out.println('Using Deque -'); for(int i = 0; i System.out.print(list2.get(i) + ' ' ); } System.out.println(); } }>

>

>

Výkon

Using Stack - 1 2 Using Deque - 2 1>