CodeGym /Java blog /Véletlen /Java Stack 101: Haladjunk a verem osztályba
John Squirrels
Szint
San Francisco

Java Stack 101: Haladjunk a verem osztályba

Megjelent a csoportban
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
A verem is örökli a Vector részét képező összes metódust , beleértve, de nem kizárólagosan a toString() , a include() , az indexOf() és a lastElement() metódusokat . Java Stack 101: elmélyülés a veremosztályba – 1

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.
Hozzászólások
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION