The pino on lineaarinen tietorakenne, jota käytetään objektikokoelman tallentamiseen. Se perustuu Viimeisenä sisään ensimmäisenä ulos (LIFO). Java kokoelma Framework tarjoaa monia rajapintoja ja luokkia objektikokoelman tallentamiseen. Yksi niistä on Pinoluokka joka tarjoaa erilaisia toimintoja, kuten push, pop, search jne.
Tässä osiossa keskustelemme Java Stack -luokka , sen menetelmät, ja toteuttaa pinon tietorakenne kohdassa a Java ohjelma . Mutta ennen kuin siirryt Java Stack -luokkaan, tutustu nopeasti pinon toimintaan.
Pinotietorakenteessa on kaksi tärkeintä toimintoa työntää ja pop . Push-toiminto lisää elementin pinoon ja pop-toiminto poistaa elementin pinon yläosasta. Katsotaan kuinka ne toimivat pinossa.
Työnnetään pinoon vastaavasti 20, 13, 89, 90, 11, 45, 18.
Poistetaan (pop) 18, 45 ja 11 pinosta.
Tyhjä pino: Jos pinossa ei ole elementtiä, sitä kutsutaan nimellä an tyhjä pino . Kun pino on tyhjä, ylimmän muuttujan arvo on -1.
jos muuten javassa
Kun työnnämme elementin pinoon, yläosa on kasvoi 1 . Seuraavassa kuvassa
- Työnnä 12, yläosa = 0
- Työntö 6, ylhäältä = 1
- Työnnä 9, ylhäältä = 2
Kun nostamme elementin pinosta, arvo top on laski 1 . Seuraavassa kuvassa olemme ponnahtaneet 9.
Seuraavassa taulukossa näkyvät yläosan eri arvot.
Java-pinoluokka
Javalla, Pino on luokka, joka kuuluu Collection-kehykseen, joka laajentaa Vektori luokkaa. Se toteuttaa myös rajapintoja Luettelo, kokoelma, iteroitava, kloonattava, sarjoitettava. Se edustaa LIFO-objektien pinoa. Ennen kuin käytämme Stack-luokkaa, meidän on tuotavajava.utilpaketti. Pinoluokka on järjestetty Kokoelmat-kehyksen hierarkiaan alla olevan kuvan mukaisesti.
Pinoluokan rakentaja
Stack-luokka sisältää vain oletuskonstruktori joka luo tyhjän pinon.
public Stack()
Pinon luominen
Jos haluamme luoda pinon, tuo ensinjava.utilpaketti ja luo Stack-luokan objekti.
Stack stk = new Stack();
Tai
Stack stk = new Stack();
Missä tyyppi tarkoittaa pinon tyyppiä, kuten kokonaisluku, merkkijono jne.
Pinoluokan menetelmät
Voimme suorittaa pinossa push-, pop-, peek- ja hakutoimintoja. Java Stack -luokka tarjoaa pääasiassa viisi menetelmää näiden toimintojen suorittamiseen. Tämän lisäksi se tarjoaa myös kaikki menetelmät Java Vector -luokka .
Menetelmä | Muokkaus ja tyyppi | Menetelmän kuvaus |
---|---|---|
tyhjä() | boolean | Menetelmä tarkistaa, onko pino tyhjä vai ei. |
push (E-tuote) | JA | Menetelmä työntää (lisää) elementin pinon yläosaan. |
pop() | JA | Menetelmä poistaa elementin pinon yläosasta ja palauttaa saman elementin kuin kyseisen funktion arvo. |
kurkistaa() | JA | Menetelmä tarkastelee pinon ylintä elementtiä poistamatta sitä. |
haku (objekti o) | int | Menetelmä etsii määritetyn objektin ja palauttaa objektin sijainnin. |
Pinoluokka tyhjä() -menetelmä
The tyhjä() Stack-luokan menetelmä tarkistaa, onko pino tyhjä vai ei. Jos pino on tyhjä, se palauttaa tosi, muussa tapauksessa false. Voimme myös käyttää Vector-luokan isEmpty()-metodia.
Syntaksi
public boolean empty()
Palautukset: Metodi palauttaa true, jos pino on tyhjä, muussa tapauksessa palauttaa false.
Seuraavassa esimerkissä olemme luoneet Stack-luokan esiintymän. Sen jälkeen olemme käyttäneet tyhjä()-metodia kaksi kertaa. Ensimmäistä kertaa se palaa totta koska emme ole työntäneet mitään elementtiä pinoon. Sen jälkeen olemme työntäneet elementit pinoon. Jälleen olemme käyttäneet tyhjä()-metodia, joka palauttaa väärä koska pino ei ole tyhjä.
StackEmptyMethodExample.java
import java.util.Stack; public class StackEmptyMethodExample { public static void main(String[] args) { //creating an instance of Stack class Stack stk= new Stack(); // checking stack is empty or not boolean result = stk.empty(); System.out.println('Is the stack empty? ' + result); // pushing elements into stack stk.push(78); stk.push(113); stk.push(90); stk.push(120); //prints elements of the stack System.out.println('Elements in Stack: ' + stk); result = stk.empty(); System.out.println('Is the stack empty? ' + result); } }
Lähtö:
Is the stack empty? true Elements in Stack: [78, 113, 90, 120] Is the stack empty? false
Pinoluokan push() -menetelmä
Menetelmä lisää kohteen pinon yläosaan. Se toimii samalla tavalla kuin Vector-luokan metodi addElement(item). Se välittää parametrin kohde työnnettäväksi pinoon.
Syntaksi
public E push(E item)
Parametri: Tavara, joka työnnetään pinon päälle.
Palautukset: Metodi palauttaa argumentin, jonka olemme hyväksyneet parametrina.
git-komennot pushille
Pinoluokka pop() -menetelmä
Menetelmä poistaa pinon yläosassa olevan objektin ja palauttaa saman objektin. Se heittää EmptyStackException jos pino on tyhjä.
Syntaksi
public E pop()
Palautukset: Se palauttaa objektin, joka on pinon yläosassa.
Toteutetaan pino Java-ohjelmaan ja tehdään push- ja pop-operaatioita.
StackPushPopExample.java
import java.util.*; public class StackPushPopExample { public static void main(String args[]) { //creating an object of Stack class Stack stk = new Stack(); System.out.println('stack: ' + stk); //pushing elements into the stack pushelmnt(stk, 20); pushelmnt(stk, 13); pushelmnt(stk, 89); pushelmnt(stk, 90); pushelmnt(stk, 11); pushelmnt(stk, 45); pushelmnt(stk, 18); //popping elements from the stack popelmnt(stk); popelmnt(stk); //throws exception if the stack is empty try { popelmnt(stk); } catch (EmptyStackException e) { System.out.println('empty stack'); } } //performing push operation static void pushelmnt(Stack stk, int x) { //invoking push() method stk.push(new Integer(x)); System.out.println('push -> ' + x); //prints modified stack System.out.println('stack: ' + stk); } //performing pop operation static void popelmnt(Stack stk) { System.out.print('pop -> '); //invoking pop() method Integer x = (Integer) stk.pop(); System.out.println(x); //prints modified stack System.out.println('stack: ' + stk); } }
Lähtö:
stack: [] push -> 20 stack: [20] push -> 13 stack: [20, 13] push -> 89 stack: [20, 13, 89] push -> 90 stack: [20, 13, 89, 90] push -> 11 stack: [20, 13, 89, 90, 11] push -> 45 stack: [20, 13, 89, 90, 11, 45] push -> 18 stack: [20, 13, 89, 90, 11, 45, 18] pop -> 18 stack: [20, 13, 89, 90, 11, 45] pop -> 45 stack: [20, 13, 89, 90, 11] pop -> 11 stack: [20, 13, 89, 90]
Pinoluokka peek() -menetelmä
Se tarkastelee elementtiä, joka on pinon yläosassa. Se myös heittää EmptyStackException jos pino on tyhjä.
Syntaksi
public E peek()
Palautukset: Se palauttaa pinon ylimmät elementit.
Katsotaanpa esimerkki peek()-menetelmästä.
StackPeekMethodExample.java
import java.util.Stack; public class StackPeekMethodExample { public static void main(String[] args) { Stack stk= new Stack(); // pushing elements into Stack stk.push('Apple'); stk.push('Grapes'); stk.push('Mango'); stk.push('Orange'); System.out.println('Stack: ' + stk); // Access element from the top of the stack String fruits = stk.peek(); //prints stack System.out.println('Element at top: ' + fruits); } }
Lähtö:
Stack: [Apple, Grapes, Mango, Orange] Element at the top of the stack: Orange
Pinoluokan haku() -menetelmä
Menetelmä etsii pinon objektia ylhäältä. Se jäsentää parametrin, jota haluamme etsiä. Se palauttaa pinon objektin 1-perusteisen sijainnin. Pinon ylintä kohdetta tarkastellaan etäisyydellä 1.
Oletetaan, että o on pinossa oleva objekti, jota haluamme etsiä. Menetelmä palauttaa pinon yläosaa lähinnä olevan esiintymän etäisyyden pinon yläosasta. Se käyttää on yhtä suuri () menetelmä pinon kohteen etsimiseen.
Syntaksi
public int search(Object o)
Parametri: o on haluttu haettava kohde.
Palautukset: Se palauttaa objektin sijainnin pinon yläosasta. Jos se palauttaa -1, se tarkoittaa, että objekti ei ole pinossa.
Katsotaanpa esimerkki haku()-menetelmästä.
StackSearchMethodExample.java
import java.util.Stack; public class StackSearchMethodExample { public static void main(String[] args) { Stack stk= new Stack(); //pushing elements into Stack stk.push('Mac Book'); stk.push('HP'); stk.push('DELL'); stk.push('Asus'); System.out.println('Stack: ' + stk); // Search an element int location = stk.search('HP'); System.out.println('Location of Dell: ' + location); } }
Java-pinotoiminnot
Pinon koko
Voimme myös selvittää pinon koon Vector-luokan size()-metodilla. Se palauttaa pinon elementtien kokonaismäärän (pinon koon).
Syntaksi
public int size()
Katsotaanpa esimerkki Vector-luokan size()-metodista.
StackSizeExample.java
import java.util.Stack; public class StackSizeExample { public static void main (String[] args) { Stack stk = new Stack(); stk.push(22); stk.push(33); stk.push(44); stk.push(55); stk.push(66); // Checks the Stack is empty or not boolean rslt=stk.empty(); System.out.println('Is the stack empty or not? ' +rslt); // Find the size of the Stack int x=stk.size(); System.out.println('The stack size is: '+x); } }
Lähtö:
Is the stack empty or not? false The stack size is: 5
Iteroi elementtejä
Iterointi tarkoittaa pinon elementtien hakemista. Voimme hakea pinon elementtejä kolmella eri menetelmällä, jotka ovat seuraavat:
- Käyttämällä iteraattori() Menetelmä
- Käyttämällä jokaiselle() Menetelmä
- Käyttämällä listIterator() Menetelmä
Iterator()-menetelmän käyttäminen
Se on Iterator-rajapinnan menetelmä. Se palauttaa iteraattorin pinon elementtien päälle. Ennen kuin käytät iterator()-menetelmää, tuojava.util.Iteratorpaketti.
Syntaksi
Iterator iterator()
Suoritetaan iteraatio pinon yli.
StackIterationExample1.java
import java.util.Iterator; import java.util.Stack; public class StackIterationExample1 { public static void main (String[] args) { //creating an object of Stack class Stack stk = new Stack(); //pushing elements into stack stk.push('BMW'); stk.push('Audi'); stk.push('Ferrari'); stk.push('Bugatti'); stk.push('Jaguar'); //iteration over the stack Iterator iterator = stk.iterator(); while(iterator.hasNext()) { Object values = iterator.next(); System.out.println(values); } } }
Lähtö:
BMW Audi Ferrari Bugatti Jaguar
ForEach()-menetelmän käyttäminen
Java tarjoaa forEach()-menetelmän elementtien iterointiin. Menetelmä on määritelty kohdassa Iteroitavissa ja Striimaa käyttöliittymä.
java sisältää alimerkkijonon
Syntaksi
default void forEach(Consumeraction)
Iteroidaan pinon yli käyttämällä forEach()-metodia.
StackIterationExample2.java
import java.util.*; public class StackIterationExample2 { public static void main (String[] args) { //creating an instance of Stack class Stack stk = new Stack(); //pushing elements into stack stk.push(119); stk.push(203); stk.push(988); System.out.println('Iteration over the stack using forEach() Method:'); //invoking forEach() method for iteration over the stack stk.forEach(n -> { System.out.println(n); }); } }
Lähtö:
Iteration over the stack using forEach() Method: 119 203 988
ListIterator()-menetelmän käyttäminen
Tämä menetelmä palauttaa listaiteraattorin mainitun listan elementtien päälle (peräkkäin), alkaen määritetystä kohdasta luettelossa. Se toistaa pinon ylhäältä alas.
Syntaksi
ListIterator listIterator(int index)
Parametri: Menetelmä jäsentää parametrin nimeltä indeksi.
Palautukset: Tämä menetelmä palauttaa luetteloiteraattorin elementtien päälle järjestyksessä.
Poikkeus: Se heittää IndexOutOfBoundsException jos indeksi on alueen ulkopuolella.
Iteroidaan pinon yli käyttämällä listIterator()-metodia.
StackIterationExample3.java
import java.util.Iterator; import java.util.ListIterator; import java.util.Stack; public class StackIterationExample3 { public static void main (String[] args) { Stack stk = new Stack(); stk.push(119); stk.push(203); stk.push(988); ListIterator ListIterator = stk.listIterator(stk.size()); System.out.println('Iteration over the Stack from top to bottom:'); while (ListIterator.hasPrevious()) { Integer avg = ListIterator.previous(); System.out.println(avg); } } }
Lähtö:
Iteration over the Stack from top to bottom: 988 203 119