Java Ogrodje zbirke zagotavlja razred Stack, ki modelira in izvaja a Spodnji diagram prikazuje hierarhija razreda Stack :

Razred podpira enega privzeti konstruktor Stack() ki je vajen ustvarite prazen sklad .
Izjava:
public class Stack extends Vector>
Vsi implementirani vmesniki:
- Serializable: To je označevalni vmesnik, ki ga morajo razredi implementirati, če naj bodo serializirani in deserializirani.
- Možnost kloniranja: To je vmesnik v Javi, ki ga mora implementirati razred, da omogoči kloniranje svojih objektov.
- Ponovljivo: Ta vmesnik predstavlja zbirko predmetov, ki jih je mogoče ponavljati, kar pomeni, da jih je mogoče ponoviti.
- Zbirka: Zbirka predstavlja skupino predmetov, znanih kot njeni elementi. Vmesnik zbirke se uporablja za posredovanje zbirk predmetov, kjer je zaželena največja splošnost.
- seznam: Vmesnik Seznam omogoča shranjevanje naročene zbirke. Je podrejeni vmesnik zbirke.
- RandomAccess: To je označevalni vmesnik, ki ga uporabljajo izvedbe seznama za označevanje, da podpirajo hiter (na splošno konstanten čas) naključni dostop.
Kako ustvariti sklad?
Da bi ustvarili sklad, moramo uvoziti java.util.stack paket in uporabite konstruktor Stack() tega razreda. Spodnji primer ustvari prazen sklad.
Stack stack = new Stack();
Tukaj je E vrsta predmeta.
primer:
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>);> >}> }> |
primer java lambda
>
>
Izhod:
Pop Operation: 4 3 2 1 0 Element on stack top: 4 Element is found at position: 3 Element not found>
Izvajanje različnih operacij v razredu Stack
1. Dodajanje elementov: Da bi dodali element v sklad, lahko uporabimo metoda push(). . to potisni() operacija postavi element na vrh sklada.
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);> >}> }> |
>
>
Izhod:
[4, All, Geeks] [Geeks, For, Geeks]>
2. Dostop do elementa: Za pridobitev ali pridobitev prvega elementa sklada ali elementa, ki je prisoten na vrhu sklada, lahko uporabimo pokukati() metoda. Pridobljeni element se ne izbriše ali odstrani iz sklada.
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);> >}> }> |
oblazinjenje css
>
>
Izhod:
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. Odstranjevanje elementov: Za izstrelitev elementa iz sklada lahko uporabimo pop() metoda. Element se izstreli z vrha sklada in se z njega odstrani.
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);> >}> }> |
>
>
Izhod:
Initial Stack: [10, 15, 30, 20, 5] Popped element: 5 Popped element: 20 Stack after pop operation [10, 15, 30]>
Primer
V Javi je razred Stack podrazred razreda Vector in predstavlja sklad objektov zadnji prispel, prvi ven (LIFO). Razširja razred Vector, da omogoči enostavno implementacijo podatkovne strukture sklada.
Tukaj je primer, kako lahko uporabite razred Stack v Javi:
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());> >}> >}> }> |
>
>Izhod
4 3 2 1>
V tem primeru najprej uvozimo razred Stack iz paketa java.util. Nato z uporabo privzetega konstruktorja ustvarimo nov objekt Stack, imenovan stack. Štiri cela števila potisnemo na sklad z uporabo metode push(). Nato izločimo elemente iz sklada z metodo pop() znotraj zanke while. Metoda isEmpty() se uporablja za preverjanje, ali je sklad prazen, preden poskusite odpreti element.
Ta koda ustvari sklad celih števil in potisne 4 cela števila na sklad v vrstnem redu 1 -> 2 -> 3 -> 4. Nato elemente iz sklada izločimo enega za drugim z metodo pop(), ki odstrani in vrne zgornji element sklada. Ker sklad sledi vrstnemu redu zadnji prišel, prvi ven (LIFO), se elementi izločijo v obratnem vrstnem redu vstavljanja, rezultat pa je izhod, prikazan zgoraj.
Razred Stack ponuja več drugih metod za manipulacijo sklada, kot je peek() za pridobitev zgornjega elementa, ne da bi ga odstranili, search() za iskanje elementa v skladu in vrnitev njegovega položaja ter size() za vrnitev trenutnega velikost sklada. Razred Stack ponuja tudi več konstruktorjev za ustvarjanje sklada z določeno začetno zmogljivostjo ali s kopiranjem obstoječega sklada.
Metode v razredu Stack
| METODA | OPIS |
|---|---|
| prazno() | Vrne true, če ni ničesar na vrhu sklada. V nasprotnem primeru vrne false. |
| pokukati() | Vrne element na vrhu sklada, vendar ga ne odstrani. |
| pop() | Odstrani in vrne zgornji element sklada. Izjema »EmptyStackException« Izjema se sproži, če pokličemo pop(), ko je klicajoči sklad prazen. |
| potisni (element predmeta) | Potisne element na vrh sklada. |
| iskanje (element predmeta) | Določa, ali predmet obstaja v skladu. Če je element najden, Vrne položaj elementa z vrha sklada. V nasprotnem primeru vrne -1. |
Metode, podedovane iz razreda java.util.Vector
| METODA | OPIS |
|---|---|
| dodaj (obj. predmeta) | Doda podani element na konec tega vektorja. |
| add(int index, Object obj) | Vstavi podani element na podano mesto v tem vektorju. |
| addAll(zbirka c) | Pripne vse elemente v podani zbirki na konec tega vektorja, v vrstnem redu, kot jih vrne podani iterator zbirke. kaj je internet |
| addAll(int indeks, zbirka c) | Vstavi vse elemente v določeni zbirki v ta vektor na določen položaj. |
| addElement(predmet o) | Doda navedeno komponento na konec tega vektorja in poveča njegovo velikost za eno. |
| zmogljivost() | Vrne trenutno zmogljivost tega vektorja. |
| počisti() | Odstrani vse elemente iz tega vektorja. |
| klon() | Vrne klon tega vektorja. |
| vsebuje (predmet o) | Vrne true, če ta vektor vsebuje podani element. |
| vsebujeVse(Zbirka c) | Vrne true, če ta vektor vsebuje vse elemente v navedeni zbirki. |
| copyInto(predmet []matrika) | Kopira komponente tega vektorja v navedeno matriko. |
| elementAt(int indeks) | Vrne komponento pri podanem indeksu. |
| elementi () | Vrne naštevanje komponent tega vektorja. |
| zagotoviCapacity(int minCapacity) | Po potrebi poveča zmogljivost tega vektorja, da zagotovi, da lahko zadrži najmanj toliko komponent, kot je določeno z argumentom minimalne zmogljivosti. |
| enako () | Primerja navedeni predmet s tem vektorjem za enakost. |
| firstElement() | Vrne prvo komponento (element z indeksom 0) tega vektorja. |
| get(indeks) | Vrne element na podani poziciji v tem vektorju. |
| hashCode() | Vrne vrednost zgoščene kode za ta vektor. |
| indexOf(predmet o) | Vrne indeks prve pojavitve podanega elementa v tem vektorju ali -1 če ta vektor ne vsebuje elementa. |
| indexOf(predmet o, int indeks) | Vrne indeks prve pojavitve podanega elementa v tem vektorju, pri čemer išče naprej od indeksa, ali vrne -1, če element ni najden. |
| insertElementAt(predmet o, int indeks) | Vstavi navedeni predmet kot komponento v tem vektorju pri podanem indeksu. |
| je prazno() | Preveri, ali ta vektor nima komponent. |
| iterator() | Vrne iterator nad elementi na tem seznamu v pravilnem zaporedju. |
| lastElement() | Vrne zadnjo komponento vektorja. |
| lastIndexOf(predmet o) | Vrne indeks zadnje pojavitve podanega elementa v tem vektorju ali -1 Če ta vektor ne vsebuje elementa. |
| lastIndexOf(predmet o, int indeks) | Vrne indeks zadnje pojavitve podanega elementa v tem vektorju, iskanje nazaj od indeksa ali vrne -1, če element ni najden. |
| listIterator() | Vrne iterator seznama nad elementi na tem seznamu (v pravilnem zaporedju). |
| listIterator(int indeks) | Vrne iterator seznama nad elementi na tem seznamu (v pravilnem zaporedju), začenši na določenem mestu na seznamu. |
| odstrani (indeks) | Odstrani element na določenem mestu v tem vektorju. |
| odstrani (predmet o) | Odstrani prvo pojavitev podanega elementa v tem vektorju. Če vektor ne vsebuje elementa, je nespremenjen. |
| odstraniVse(Zbirka c) | Iz tega vektorja odstrani vse njegove elemente, ki so vsebovani v navedeni zbirki. |
| odstraniVseElemente() | Odstrani vse komponente iz tega vektorja in nastavi njegovo velikost na nič. |
| odstraniElement(predmet o) | Odstrani prvo (najnižje indeksirano) pojavitev argumenta iz tega vektorja. |
| odstraniElementAt(int indeks) | Izbriše komponento na podanem indeksu. |
| removeRange(int fromIndex, int toIndex) | S tega seznama odstrani vse elemente, katerih indeks je med fromIndex, vključno, in toIndex, izključno. |
| retainAll(zbirka c) | Ohrani le elemente v tem vektorju, ki so vsebovani v navedeni zbirki. |
| set(int indeks, predmet o) | Zamenja element na podanem mestu v tem vektorju s podanim elementom. |
| setElementAt(predmet o, int indeks) | Nastavi komponento na podanem indeksu tega vektorja kot podani objekt. |
| setSize(int newSize) | Nastavi velikost tega vektorja. |
| velikost () | Vrne število komponent v tem vektorju. |
| subList(int fromIndex, int toIndex) | Vrne pogled dela tega seznama med fromIndex, vključno, in toIndex, izključno. |
| toArray() | Vrne matriko, ki vsebuje vse elemente v tem vektorju v pravilnem vrstnem redu. |
| toArray(predmet []matrika) | Vrne matriko, ki vsebuje vse elemente v tem vektorju v pravilnem vrstnem redu; čas izvajanja vrsta vrnjene matrike je navedena matrika. |
| toString() | Vrne nizovno predstavitev tega vektorja, ki vsebuje nizovno predstavitev vsakega elementa. |
| trimToSize() | Zmogljivost tega vektorja zmanjša na trenutno velikost vektorja. |
Dajte prednost uporabi O čem čez sklad -:
Razred Stack v Javi je starejši razred in deduje od Vektor v Javi . Je razred, ki je varen za niti in zato vključuje dodatne stroške, ko ne potrebujemo varnosti niti. Priporočljivo je uporabljati ArrayDeque za implementacijo sklada, saj je učinkovitejša v okolju z eno nitjo.
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());> >}> }> |
>
>
Izhod:
B B>
Še en razlog več za uporabo Deque namesto Stacka je ta, da ima Deque možnost uporabe pretvorbe tokov v seznam z ohranjanjem uporabljenega koncepta LIFO, medtem ko Stack ne.
sortiraj seznam matrik java
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(); } }> |
>
>Izhod
Using Stack - 1 2 Using Deque - 2 1>