A Java- verem egy adatstruktúra, hasonlóan egy sorhoz, tömbhöz, csatolt listához vagy fához. Ami különbözik a többitől, az az, hogy a Java Stack a Last In, First Out (LIFO) elven alapul. Ez azt jelenti, hogy amikor a két parancsot használja egy elem hozzáadásához és eltávolításához a veremből, mindig az első eltávolítás lesz az utolsó hozzáadott elem. Nézzük meg közelebbről a Java Stack osztályt
A Java Stack osztály felfedezése
A Java Stack Class a Vector osztály kiterjesztése , amely maga is kiterjeszti a List osztályt. Mivel a vektorok változtathatók, és növekedhetnek és zsugorodhatnak a benne lévő elemek igényei szerint, a Stack s igény szerint módosíthatja a méretét is. A Vector osztály kiterjesztése öt műveletet ad hozzá, amelyek egy vektort veremmé alakítanak át . Ez az öt művelet a következő:- .push(E item) – egy elemet helyez el a verem tetejére
- .pop() – eltávolítja a verem tetején lévő elemet, és visszaadja a függvény értékeként
- .peek() – a verem tetején lévő elemet nézi anélkül, hogy eltávolítaná
- .empty() – Logikai függvény annak ellenőrzésére, hogy a verem üres-e vagy sem. 0-t vagy 1-et ad vissza.
- .search(Object o) – Megkeresi az o-t és visszaadja a pozícióját. Az érték 1 alapú, nem 0

Java verem kódolása
Most, hogy ismerjük a verem funkcióit , kódoljunk egy Java verem példát. A verem nagyon hasznos az ideiglenesen tárolandó és gyorsan visszakereshető adatok kezelésére. Mivel a verem LIFO, rendkívül hasznos a csomópontok bejárásához, amikor egy fa adatszerkezetet vizsgál. Mielőtt mindebbe belemennénk, hozzunk létre egy alapvermet. A verem megvalósításának kódja a következő:
import java.util.*;
class Main {
public static void main(String[] args) {
Stack<Integer> stackExample = new Stack<Integer>();
Csak ennyit kell tennie egy üres verem létrehozásához . Egyszerűen deklarálhatja adattípus deklarálása nélkül is a következő használatával:
Stack example = new Stack();
Ne feledje, hogy mivel a verem s változtatható, amikor elemeket tolunk a verembe, automatikusan beállítja a méretet. Most nézzük meg, hogyan kell használni a Stack funkciókat.
Java Stack megvalósítás
Nézzük meg, hogyan használhatjuk azt az öt módszert, amelyeket korábban röviden megvizsgáltunk. A Java verem implementációja könnyen megjegyezhető, ha úgy tekintünk rá, mint egy halom lemezre. Tányérokat teszel a veremre, de ahhoz, hogy tányért kapj, nem alul mész, hanem felülről. Amit utoljára felvesz, az az első, amelyet levesz. Az előző példánkat a stackExample- vel bővítve a függvények a következők:Nyom
// pushing integers onto the Stack
stackExample.push(5);
stackExample.push(10);
Ezen a ponton a többi függvényt úgy fogjuk bemutatni, mintha ezt a két egész számot a Java verempéldába minden alkalommal betoltuk volna.
Pop
//popping integers off of the Stack
System.out.println(stackExample.pop());
System.out.println(stackExample.pop());
Kimenet:
10
5
Üres
Tegyük fel, hogy el akarja távolítani az összes elemet egy veremből, de nem biztos benne, hogy hány elem van benne. Kombinálhatja a Boolean.isEmpty() függvényt a while ciklus előfeltételével, hogy az összes elemet kiemelje a veremből . Nézze meg, hogyan történik ez a java verem megvalósítás.
while(!stackExample.isEmpty()) {
System.out.println(stackExample.pop());
}
Kimenet
10
5
Kandikál
Használhatjuk a .peek()-et veremmegvalósításként a Java-ban, hogy a verem következő elemét eltávolítsuk anélkül, hogy megnéznénk.
System.out.println(stackExample.peek());
Kimenet
10
Ha felpattintjuk és kinyomtatjuk a Stack -et , akkor 10-et és 5-öt ad vissza, mert a 10-es még mindig a veremben van. Csak megnéztük, nem a pop funkcióval távolítottuk el. A peek funkció egy nagyszerű eszköz a Stack s-hez java-ban.
Keresés
Ha meg akarunk találni egy adott elemet, a Java verem-megvalósítása a .search(e); hogy megtalálja.
System.out.println(stackExample.search(5));
Kimenet
2
Ne feledje, hogy ez azért van, mert a verem tetejétől számítunk, és a Java verem 1-gyel kezdődik, nem pedig 0-val, mint egy tömbben . Tehát a veremre nézve ez (10) --> (5), az 5 pedig a 2-es helyen áll. Ha olyan elemet próbál találni, amely nem szerepel a veremben , akkor -1-et fog kapni kimenetként.
Iteráció
Bármely gyűjtemény használatakor előfordulhat, hogy több elemet kell keresnie. A bonyolultság és a veremben való többszöri keresés megtakarítása érdekében iterációt használhat. Mivel a Stack in Java kiterjeszti a List osztályt, számos lehetőség van az iterációra. Az egyik legegyszerűbb a ListIterator funkció használata . A ListIterator jó abban, hogy lehetővé teszi a verem áthaladását felülről lefelé vagy alulról felfelé a .hasPrevious() vagy .hasNext() segítségével . Így néz ki:
ListIterator<Integer> exampleIterator = stackExample.listIterator(stackExample.size());
while (exampleIterator.hasPrevious()) {
int iteration = exampleIterator.previous();
System.out.println(iteration);
}
Kimenet
10
5
Ne feledje, hogy amikor a Stack s-en keresztül iterál Java nyelven, nem távolít el egyetlen elemet sem. Az iteráció lényegében lehetővé teszi, hogy a verem minden elemét sorrendben megnézze. Amikor ezt megteszi, megkeresheti azokat a helyeket, ahol bizonyos elemek vannak, majd áthaladhat és manipulálhat rajtuk. Szükség esetén megszámolhatja, törölheti vagy akár módosíthatja is őket.
GO TO FULL VERSION