A Java Stack osztály kiterjeszti a Vector osztályt. Lehetővé teszi új elemek létrehozását, egy elem megtekintését a veremben, egy elem frissítését a veremben, valamint az összes elem törlését a veremből. A folyamatadatokat FILO (first-in-last-out) sorrendben halmozza fel. Ez azt jelenti, hogy csak a verem tetejéről adhat hozzá vagy távolíthat el elemeket.
A verem adatszerkezetének öt elsődleges módszere van. A Java Stack osztály azonban több mint 40 másik metódushoz is hozzáfér, amelyeket a Vector osztálytól örököl.
Verem létrehozása Java nyelven
A Stack osztály egyetlen konstruktora van amely lehetővé teszi egy üres verem létrehozását. Minden veremhez tartozik egy type argumentum, amely meghatározza a tárolni kívánt adatok típusát.
import java.util. Kazal;
nyilvánososztályFő{
nyilvánosstatikusüresfő-(String[] args){
// verem létrehozása
KazalÜgyfelek = új Kazal ();
}
}
A fenti kód egy verem adatszerkezetet hoz létre, melynek neve Ügyfelek amely String értékeket tárol.
Verem feltöltése
A Stack osztály öt elsődleges metódusának egyike a
nyom() módszer. Egyetlen elemet vesz igénybe, amelynek adattípusa megegyezik a verem adattípusával, és ezt az elemet a verem tetejére tolja.// verem feltöltése
Customers.push("Jane Doe");
Customers.push("John Doe");
Customers.push("Patrick Williams");
Customers.push("Paul Smith");
Customers.push("Erick Rowe");
Customers.push("Ella Jones");
Customers.push("Jessica Brown");
A fenti kód hét elemmel tölti fel a Vevők Stackjét. Minden új elemet a verem tetejére tol. Tehát a Customers Stack tetején lévő elem Jessica Brown. És ezt megerősítheti a Stack segítségével kandikál() módszer. Az kandikál() A módszer nem vesz fel érveket. Visszaküldi a verem tetején lévő objektumot anélkül, hogy eltávolítaná.
// objektum megtekintése a verem tetején
System.out.println (Customers.peek());
A fenti kód a következő kimenetet adja vissza a konzolnak:
Jessica Brown
Tekintse meg az elemeket egy halomban
A verem-adatstruktúra meglehetősen korlátozza az adatokkal való interakciót. A Stack-et elsősorban a legfelső elemén keresztül érdemes használni. A Vector osztályból örökölt metódusokat is használhat azonban tetszőleges elemek eléréséhez. Ilyen módszerek közé tartozik az elementAt és a removeElementAt.
A legegyszerűbb módja annak, hogy áttekintést kapjon a verem tartalmáról, ha egyszerűen kinyomtatja. Adj át egy Stack objektumot System.out.println és a Stack toString() metódusa szép összefoglalót készít:
// egy verem összes elemének megtekintése
System.out.println (Ügyfelek);
A fenti kód a következő kimenetet nyomtatja ki a konzolra:
[Jane Doe, John Doe, Patrick Williams, Paul Smith, Erick Rowe, Ella Jones, Jessica Brown]
Elempozíció keresése egy halomban
Ha ismer egy elemet a veremben, azonosíthatja annak indexpozícióját vagy a verem tetejéhez viszonyított pozícióját. Az indexe() metódus vesz egy elemet a veremben, és visszaadja annak indexpozícióját. Ügyeljen arra, hogy a verem nulláról kezdi indexelni az elemeket.
// cikkindexpozíció keresése
System.out.println (Customers.indexOf("Jane Doe"));
A fenti kód a következő kimenetet nyomtatja ki a konzolra:
0
Az keresés() metódus a Stack osztály egyik elsődleges metódusa. Egy elempozíciót ad vissza a verem tetejéhez képest, ahol a verem tetején lévő elem első számú pozíciója van.
System.out.println (Customers.search("Jane Doe"));
A fenti kód a következő kimenetet nyomtatja ki a konzolra:
7
Ha ellátja a keresés() vagy a indexe() metódusokat olyan elemmel, amely nincs a veremben, akkor negatívat adnak vissza.
System.out.println (Customers.search("Elsa Doe"));
System.out.println (Customers.indexOf("Elsa Doe"));
A fenti kód a következő kimenetet nyomtatja ki a konzolra:
-1
-1
Elemek frissítése egy halomban
Csak a verem tetején lévő elemet lehet manipulálni. Tehát, ha egy olyan elemet szeretne frissíteni, amely nem található a verem tetején, akkor az összes elemet fölé kell helyeznie. Az pop() módszer a Stack egyik elsődleges módszere. Az pop() A módszer nem vesz fel érveket. Eltávolítja a köteg tetején lévő elemet, és visszaküldi.
// objektum frissítése
Customers.pop();
Customers.pop();
Customers.push("Ella James");
Customers.push("Jessica Brown");
System.out.println (Ügyfelek);
A fenti kód a következő kimenetet nyomtatja ki a konzolra:
[Jane Doe, John Doe, Patrick Williams, Paul Smith, Erick Rowe, Ella James, Jessica Brown]
Amint a kimenetből látható, a kód Ella vezetéknevét Jamesre frissíti. Ez egy olyan folyamatot foglal magában, amely az elemeket kiugrik a veremből, amíg meg nem érkezik a célobjektum. Ezután felbukkan a célobjektum; frissíti; és a céltárgy tetején lévő elemekkel együtt visszatolja a verembe. Minden alkalommal, amikor frissíteni szeretne egy elemet a veremben, olyan programot kell használnia, amely a fentihez hasonló műveleteket hajt végre.
Elem törlése halomból
Egyetlen elem törléséhez a verem adatstruktúrából ismét használhatja a pop() metódust. Ha a törölni kívánt elem nincs felül, akkor az elemeket felülre helyezheti, amíg el nem éri a kívánt elemet.
Egy halom összes elemének törlése
A verem összes elemének törléséhez használhatja a Java while ciklus a pop() metódussal az elemek egyenkénti törléséhez. Hatékonyabb megközelítés azonban a egyértelmű() módszer. Az egyértelmű() metódus az egyik, amit a Stack osztály örököl a Vector osztálytól. Nem kér argumentumokat, nem ad vissza semmit, hanem egyszerűen eltávolítja az összes elemet a verem adatstruktúrán belül.
// egy verem összes elemének törlése
Ügyfelek.clear();
System.out.println (Customers.empty());
A fenti kód törli az összes elemet a Customers Stackben. Ezután a üres() módszerrel ellenőrizheti, hogy a verem üres-e. Az üres() a Java Stack Class másik elsődleges módszere. Nem használ argumentumot, és logikai értéket ad vissza. Ez a metódus igazat ad vissza, ha a verem üres, egyébként hamis értéket ad vissza.
A fenti kód a következő kimenetet nyomtatja ki a konzolra:
igaz
Gyakorlati alkalmazások a verem adatszerkezethez
A verem adatstruktúra nagyon korlátozó. Nem biztosít akkora rugalmasságot az adatfeldolgozásban, mint más adatstruktúrák. Ez felveti a kérdést: mikor érdemes használni a Stack adatstruktúrát?
A Stack adatstruktúra ideálisan illeszkedik azokhoz az alkalmazásokhoz, amelyek fordított sorrendben igényelnek adatfeldolgozást. Ezek tartalmazzák:
- Egy alkalmazás, amely ellenőrzi, hogy egy szó palindrom-e.
- Egy alkalmazás, amely a decimális számokat bináris számokká alakítja.
- Alkalmazások, amelyek lehetővé teszik a felhasználók számára a visszavonást.
- Olyan játékok, amelyek lehetővé teszik a felhasználó számára, hogy visszatérjen az előző lépésekhez, például egy sakkjátszma.