logo

Stack Class v Javě

Jáva Kolektivní rámec poskytuje třídu Stack, která modeluje a implementuje a Níže uvedený diagram ukazuje hierarchie třídy Stack :

Stack Class v Javě



Třída podporuje jednu výchozí konstruktor Zásobník() na který je zvyklý vytvořit prázdný zásobník .

Prohlášení:

public class Stack extends Vector>

Všechna implementovaná rozhraní:

Jak vytvořit zásobník?

Abychom vytvořili zásobník, musíme importovat java.util.stack balíček a použijte konstruktor Stack() této třídy. Níže uvedený příklad vytvoří prázdný zásobník.

Stack stack = new Stack();

Zde E je typ objektu.

Příklad:

Jáva




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

graf alokace zdrojů

>

>

Výstup:

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

Provádění různých operací na třídě Stack

1. Přidání prvků: Chcete-li přidat prvek do zásobníku, můžeme použít metoda push(). . Tento TAM() operace umístěte prvek na vrchol zásobníku.

Jáva




// 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ýstup:

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

2. Přístup k prvku: Chcete-li načíst nebo načíst první prvek zásobníku nebo prvek přítomný v horní části zásobníku, můžeme použít nahlédnout () metoda. Načtený prvek nebude odstraněn ani odstraněn ze zásobníku.

Jáva




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

pandy lok

>

>

Výstup:

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. Odebrání prvků: Chcete-li vyjmout prvek ze zásobníku, můžeme použít pop() metoda. Prvek je vytažen z horní části stohu a je z něj odstraněn.

Jáva




// 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ýstup:

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

Příklad

V Javě je třída Stack podtřídou třídy Vector a představuje zásobník objektů LIFO (poslední v pořadí). Rozšiřuje třídu Vector a umožňuje snadnou implementaci datové struktury zásobníku.

Zde je příklad toho, jak můžete použít třídu Stack v Javě:

Jáva




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ýstup

4 3 2 1>

V tomto příkladu nejprve importujeme třídu Stack z balíčku java.util. Poté vytvoříme nový objekt Stack s názvem stack pomocí výchozího konstruktoru. Čtyři celá čísla vložíme do zásobníku pomocí metody push(). Poté vyjmeme prvky ze zásobníku pomocí metody pop() uvnitř smyčky while. Metoda isEmpty() se používá ke kontrole, zda je zásobník prázdný, než se pokusíte vyjmout prvek.

Tento kód vytvoří zásobník celých čísel a vloží 4 celá čísla do zásobníku v pořadí 1 -> 2 -> 3 -> 4. Poté vyjmeme prvky ze zásobníku jeden po druhém pomocí metody pop(), která odstraní a vrátí horní prvek zásobníku. Vzhledem k tomu, že zásobník se řídí pořadím LIFO (poslední do prvního), jsou prvky vyskakovány v opačném pořadí vkládání, což má za následek výstup uvedený výše.

Třída Stack poskytuje několik dalších metod pro manipulaci se zásobníkem, jako je peek() pro načtení horního prvku bez jeho odstranění, search() pro vyhledání prvku v zásobníku a vrácení jeho pozice a size() pro vrácení aktuálního velikost zásobníku. Třída Stack také poskytuje několik konstruktorů pro vytvoření zásobníku se zadanou počáteční kapacitou nebo zkopírováním existujícího zásobníku.

Metody ve třídě Stack

METODA

POPIS

prázdný()

Vrací hodnotu true, pokud na vrcholu zásobníku nic není. Jinak vrátí hodnotu false.

nahlédnout ()

Vrátí prvek v horní části zásobníku, ale neodstraní jej.

pop()

řetězcové funkce v jazyce Java

Odebere a vrací horní prvek zásobníku. Výjimka „EmptyStackException“

Výjimka je vyvolána, pokud zavoláme pop(), když je vyvolávací zásobník prázdný.

push (prvek objektu)

Vloží prvek do horní části zásobníku.

hledat (prvek objektu)

Určuje, zda objekt v zásobníku existuje. Pokud je prvek nalezen,

Vrací polohu prvku z horní části zásobníku. Jinak vrátí -1.

Metody zděděné z třídy java.util.Vector

METODA

POPIS

add(Object obj) Připojí zadaný prvek na konec tohoto vektoru.
add(int index, Object obj) Vloží určený prvek na zadanou pozici v tomto vektoru.
addAll(kolekce c)

Připojí všechny prvky v zadané kolekci na konec tohoto vektoru,

v pořadí, v jakém jsou vráceny zadaným iterátorem kolekce.

addAll(int index, kolekce c) Vloží všechny prvky v zadané kolekci do tohoto vektoru na zadanou pozici.
addElement(Object o) Přidá zadanou komponentu na konec tohoto vektoru a zvětší její velikost o jednu.
kapacita() Vrátí aktuální kapacitu tohoto vektoru.
Průhledná() Odebere všechny prvky z tohoto vektoru.
klon() Vrátí klon tohoto vektoru.
obsahuje (Objekt o) Vrátí hodnotu true, pokud tento vektor obsahuje zadaný prvek.
obsahuje vše (kolekce c) Vrátí hodnotu true, pokud tento vektor obsahuje všechny prvky v zadané kolekci.
copyInto(Object []pole) Zkopíruje komponenty tohoto vektoru do zadaného pole.
elementAt(int index) Vrátí komponentu na zadaném indexu.
Prvky() Vrátí výčet složek tohoto vektoru.
sureCapacity (int minCapacity)

Zvyšuje kapacitu tohoto vektoru, je-li to nutné, aby se zajistilo, že může držet

alespoň počet komponent určený argumentem minimální kapacity.

rovná se() Porovná zadaný objekt s tímto vektorem pro dosažení rovnosti.
firstElement() Vrátí první komponentu (položku na indexu 0) tohoto vektoru.
get(int index) Vrátí prvek na zadané pozici v tomto vektoru.
hashCode() Vrátí hodnotu hash kódu pro tento vektor.
indexOf(Objekt o)

Vrátí index prvního výskytu zadaného prvku v tomto vektoru, neboli -1

kde je nastavení prohlížeče

pokud tento vektor prvek neobsahuje.

indexOf(Objekt o, int index) Vrátí index prvního výskytu zadaného prvku v tomto vektoru, vyhledá vpřed z indexu, nebo vrátí -1, pokud prvek nebyl nalezen.
insertElementAt(Object o, int index) Vloží zadaný objekt jako komponentu do tohoto vektoru na zadaný index.
je prázdný() Testuje, zda tento vektor nemá žádné komponenty.
iterátor() Vrátí iterátor nad prvky v tomto seznamu ve správném pořadí.
lastElement() Vrátí poslední složku vektoru.
lastIndexOf(Objekt o)

Vrátí index posledního výskytu zadaného prvku v tomto vektoru, neboli -1

Pokud tento vektor neobsahuje prvek.

lastIndexOf(Objekt o, int index)

Vrátí index posledního výskytu zadaného prvku v tomto vektoru,

vyhledá zpět z indexu nebo vrátí -1, pokud prvek není nalezen.

listIterator() Vrátí iterátor seznamu nad prvky v tomto seznamu (ve správném pořadí).
listIterator(int index)

Vrátí iterátor seznamu nad prvky v tomto seznamu (ve správném pořadí),

začínající na zadané pozici v seznamu.

odstranit (int index) Odebere prvek na zadané pozici v tomto vektoru.
odstranit (objekt o) Odstraní první výskyt zadaného prvku v tomto vektoru. Pokud Vektor prvek neobsahuje, zůstane nezměněn.
odstranit vše (kolekce c) Odebere z tohoto vektoru všechny jeho prvky, které jsou obsaženy v zadané kolekci.
removeAllElements() Odebere všechny komponenty z tohoto vektoru a nastaví jeho velikost na nulu.
removeElement(Object o) Odebere první (nejnižší indexovaný) výskyt argumentu z tohoto vektoru.
removeElementAt(int index) Odstraní komponentu na zadaném indexu.
removeRange(int fromIndex, int toIndex) Odebere z tohoto seznamu všechny prvky, jejichž index je mezi fromIndex, včetně, a toIndex, bez.
zachovat vše (kolekce c) Zachová pouze prvky v tomto vektoru, které jsou obsaženy v zadané kolekci.
set(int index, Object o) Nahradí prvek na zadané pozici v tomto vektoru zadaným prvkem.
setElementAt(Object o, int index) Nastaví komponentu na zadaném indexu tohoto vektoru jako zadaný objekt.
setSize (int newSize) Nastaví velikost tohoto vektoru.
velikost() Vrátí počet komponent v tomto vektoru.
subList(int fromIndex, int toIndex) Vrátí pohled na část tohoto seznamu mezi fromIndex, včetně, a toIndex, bez.
toArray() Vrátí pole obsahující všechny prvky tohoto vektoru ve správném pořadí.
toArray(Object []pole)

Vrátí pole obsahující všechny prvky tohoto vektoru ve správném pořadí; běhový čas

typ vráceného pole je typ zadaného pole.

toString() Vrátí řetězcovou reprezentaci tohoto Vektoru obsahující řetězcovou reprezentaci každého prvku.
trimToSize() Ořízne kapacitu tohoto vektoru na aktuální velikost vektoru.

Upřednostněte použití O čem přes zásobník -:

Třída Stack v Javě je starší třída a dědí z Vektor v Javě . Je to třída bezpečná pro vlákna, a proto zahrnuje režii, když nepotřebujeme zabezpečení vláken. Doporučuje se používat ArrayDeque pro implementaci zásobníku, protože je efektivnější v prostředí s jedním vláknem.

Jáva




// 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ýstup:

B B>

Dalším důvodem, proč používat Deque přes Stack, je Deque má schopnost používat streamy konvertované na seznam se zachováním aplikovaného konceptu LIFO, zatímco Stack ne.

Jáva




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ýstup

Using Stack - 1 2 Using Deque - 2 1>