logo

Klasa stosu w Javie

Jawa Ramy kolekcji udostępnia klasę Stack, która modeluje i implementuje a Poniższy diagram przedstawia hierarchia klasy Stack :

Klasa stosu w Javie



Klasa obsługuje jeden domyślny konstruktor Stos() do czego jest przyzwyczajony utwórz pusty stos .

Deklaracja:

public class Stack extends Vector>

Wszystkie zaimplementowane interfejsy:

Jak utworzyć stos?

Aby utworzyć stos, musimy dokonać importu java.util.stack package i użyj konstruktora Stack() tej klasy. Poniższy przykład tworzy pusty stos.

Stos stosu = nowy stos();

Tutaj E jest typem obiektu.

Przykład:

Jawa




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

pokrój Javę

>

>

Wyjście:

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

Wykonywanie różnych operacji na klasie Stack

1. Dodawanie elementów: Aby dodać element do stosu, możemy użyć metody metoda push(). . Ten naciskać() operacja umieszcza element na górze stosu.

Jawa




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

>

>

Wyjście:

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

2. Dostęp do elementu: Aby odzyskać lub pobrać pierwszy element stosu lub element znajdujący się na górze stosu, możemy użyć zerkać() metoda. Pobrany element nie jest usuwany ani usuwany ze stosu.

Jawa




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

rozmiar tekstu, lateks

>

>

Wyjście:

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. Usuwanie elementów: Aby zdjąć element ze stosu, możemy użyć metody Muzyka pop() metoda. Element jest wysuwany ze szczytu stosu i usuwany z niego.

Jawa




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

>

>

Wyjście:

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

Przykład

W Javie klasa Stack jest podklasą klasy Vector i reprezentuje stos obiektów LIFO (ostatni na wejściu, pierwszy na wyjściu). Rozszerza klasę Vector, aby umożliwić łatwą implementację struktury danych stosu.

Oto przykład wykorzystania klasy Stack w Javie:

Jawa




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

konwersja ciągu na liczbę całkowitą w Javie

>

>

Wyjście

4 3 2 1>

W tym przykładzie najpierw importujemy klasę Stack z pakietu java.util. Następnie tworzymy nowy obiekt Stack o nazwie stos, używając domyślnego konstruktora. Za pomocą metody push() wypychamy cztery liczby całkowite na stos. Następnie usuwamy elementy ze stosu za pomocą metody pop() wewnątrz pętli while. Metoda isEmpty() służy do sprawdzania, czy stos jest pusty przed próbą wyrzucenia elementu.

Ten kod tworzy stos liczb całkowitych i umieszcza 4 liczby całkowite na stosie w kolejności 1 -> 2 -> 3 -> 4. Następnie usuwamy elementy ze stosu jeden po drugim, używając metody pop(), która usuwa i zwraca górny element stosu. Ponieważ stos ma kolejność „ostatnie weszło, pierwsze wyszło” (LIFO), elementy są umieszczane w kolejności odwrotnej do wstawiania, co daje wynik pokazany powyżej.

Klasa Stack udostępnia kilka innych metod manipulowania stosem, takich jak peek() w celu pobrania najwyższego elementu bez jego usuwania, search() w celu wyszukania elementu na stosie i zwrócenia jego położenia oraz size() w celu zwrócenia bieżącego wielkość stosu. Klasa Stack udostępnia także kilka konstruktorów umożliwiających utworzenie stosu o określonej pojemności początkowej lub poprzez skopiowanie istniejącego stosu.

Metody w klasie stosu

METODA

OPIS

pusty()

Zwraca wartość true, jeśli nic nie znajduje się na szczycie stosu. W przeciwnym razie zwraca wartość false.

zerkać()

Zwraca element na górze stosu, ale go nie usuwa.

Muzyka pop()

Usuwa i zwraca górny element stosu. Wyjątek „EmptyStackException”

Jeśli wywołamy funkcję pop(), gdy stos wywołujący jest pusty, zostanie zgłoszony wyjątek.

push (element obiektu)

Wypycha element na górę stosu.

szukaj (element obiektu)

Określa, czy obiekt istnieje na stosie. Jeśli element zostanie znaleziony,

Zwraca pozycję elementu ze szczytu stosu. W przeciwnym razie zwraca -1.

Metody dziedziczone z klasy java.util.Vector

METODA

OPIS

dodaj (obiekt obiektu) Dołącza określony element na końcu tego wektora.
add(int indeks, obiekt obj) Wstawia określony element w określonej pozycji w tym Vector.
addAll(kolekcja c)

Dołącza wszystkie elementy określonej kolekcji na koniec tego wektora,

w kolejności, w jakiej są zwracane przez Iterator określonej kolekcji.

addAll(int indeks, kolekcja c) Wstawia wszystkie elementy z określonej kolekcji do tego wektora w określonej pozycji.
addElement(Obiekt o) Dodaje określony komponent na końcu tego wektora, zwiększając jego rozmiar o jeden.
pojemność() Zwraca bieżącą pojemność tego wektora.
jasne() Usuwa wszystkie elementy z tego wektora.
klon() Zwraca klon tego wektora.
zawiera (obiekt o) Zwraca wartość true, jeśli ten wektor zawiera określony element.
zawieraWszystko (kolekcja c) Zwraca wartość true, jeśli ten wektor zawiera wszystkie elementy w określonej kolekcji.
copyInto(Obiekt []tablica) Kopiuje składniki tego wektora do określonej tablicy.
elementAt(indeks int) Zwraca komponent o określonym indeksie.
elementy() Zwraca wyliczenie składników tego wektora.
zapewnij pojemność (int min pojemność)

Jeśli to konieczne, zwiększa pojemność tego wektora, aby zapewnić jego utrzymanie

co najmniej liczbę komponentów określoną w argumencie minimalnej pojemności.

równa się() Porównuje określony obiekt z tym wektorem dla równości.
pierwszy element() Zwraca pierwszy składnik (element o indeksie 0) tego wektora.
pobierz (indeks int) Zwraca element w określonej pozycji w tym wektorze.
hashCode() Zwraca wartość kodu skrótu dla tego wektora.
indeksOf(Obiekt o)

Zwraca indeks pierwszego wystąpienia określonego elementu w tym wektorze lub -1

jeśli ten wektor nie zawiera elementu.

walnij Elif
indeksOf(Obiekt o, int indeks) Zwraca indeks pierwszego wystąpienia określonego elementu w tym wektorze, wyszukując do przodu od indeksu, lub zwraca -1, jeśli element nie zostanie znaleziony.
wstawElementAt(Obiekt o, int indeks) Wstawia określony obiekt jako składnik tego wektora o określonym indeksie.
jest pusty() Sprawdza, czy ten wektor nie ma składników.
iterator() Zwraca iterator po elementach na tej liście w odpowiedniej kolejności.
ostatni element() Zwraca ostatni składnik wektora.
lastIndexOf(obiekt o)

Zwraca indeks ostatniego wystąpienia określonego elementu w tym wektorze lub -1

Jeśli ten wektor nie zawiera elementu.

lastIndexOf(Obiekt o, int indeks)

Zwraca indeks ostatniego wystąpienia określonego elementu w tym wektorze,

wyszukiwanie wstecz od indeksu lub zwraca -1, jeśli element nie został znaleziony.

listaIterator() Zwraca iterator listy po elementach tej listy (w odpowiedniej kolejności).
listIterator(int indeks)

Zwraca iterator listy po elementach tej listy (w odpowiedniej kolejności),

zaczynając od określonej pozycji na liście.

usuń(indeks int) Usuwa element w określonej pozycji w tym wektorze.
usuń(obiekt o) Usuwa pierwsze wystąpienie określonego elementu w tym wektorze. Jeśli wektor nie zawiera elementu, pozostaje niezmieniony.
usuń wszystko (kolekcja c) Usuwa z tego wektora wszystkie jego elementy zawarte w określonej kolekcji.
usuńWszystkieElementy() Usuwa wszystkie komponenty z tego wektora i ustawia jego rozmiar na zero.
usuńElement(Obiekt o) Usuwa pierwsze (najniżej indeksowane) wystąpienie argumentu z tego wektora.
usuńElementAt(int indeks) Usuwa komponent o określonym indeksie.
usuńRange(int zindeksu, int doindeksu) Usuwa z tej listy wszystkie elementy, których indeks znajduje się pomiędzy fromIndex (włącznie) a toIndex (wyłącznie).
zachowaj wszystko (kolekcja c) Zachowuje tylko elementy tego wektora, które znajdują się w określonej kolekcji.
set(int indeks, obiekt o) Zastępuje element w określonej pozycji w tym Vector określonym elementem.
setElementAt(Obiekt o, int indeks) Ustawia komponent o określonym indeksie tego wektora jako określony obiekt.
setSize(int nowyRozmiar) Ustawia rozmiar tego wektora.
rozmiar() Zwraca liczbę komponentów tego wektora.
subList(int zindeksu, int doindeksu) Zwraca widok części tej listy pomiędzy fromIndex (włącznie) i toIndex (wyłącznie).
do tablicy() Zwraca tablicę zawierającą wszystkie elementy tego wektora we właściwej kolejności.
toArray(Obiekt []tablica)

Zwraca tablicę zawierającą wszystkie elementy tego Vectora we właściwej kolejności; czas wykonania

typem zwracanej tablicy jest typ określonej tablicy.

doString() Zwraca ciąg reprezentujący ten wektor, zawierający ciąg reprezentujący każdy element.
przytnij do rozmiaru() Przycina pojemność tego wektora do bieżącego rozmiaru wektora.

Priorytetyzuj użycie O czym nad stosem -:

Klasa Stack w Javie jest starszą klasą i po niej dziedziczy Wektor w Javie . Jest to klasa bezpieczna dla wątków i dlatego wiąże się z narzutem, gdy nie potrzebujemy bezpieczeństwa wątków. Zaleca się stosowanie TablicaDeque do implementacji stosu, ponieważ jest bardziej wydajny w środowisku jednowątkowym.

Jawa




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

>

>

Wyjście:

B B>

Jeszcze jednym powodem, dla którego warto używać Deque zamiast stosu, jest to, że Deque ma możliwość konwertowania strumieni na listę z zachowaniem koncepcji LIFO, podczas gdy Stack tego nie robi.

Jawa




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

>

>

Wyjście

Using Stack - 1 2 Using Deque - 2 1>