Stack Class i Java
Java Innsamlingsramme gir en Stack-klasse som modellerer og implementerer en Diagrammet nedenfor viser hierarki av Stack-klassen :
Klassen støtter en standard konstruktør Stable() som er vant til lage en tom stabel .
Erklæring:
public class Stack extends Vector
Alle implementerte grensesnitt:
- Serialiserbar: Det er et markørgrensesnitt som klasser må implementere hvis de skal serialiseres og deserialiseres.
- Klonbar: Dette er et grensesnitt i Java som må implementeres av en klasse for at objektene skal kunne klones.
- Iterable: Dette grensesnittet representerer en samling av gjenstander som kan itereres - noe som betyr at de kan itereres.
- Samling: En samling representerer en gruppe objekter kjent som dens elementer. Samling-grensesnittet brukes til å sende rundt samlinger av objekter der maksimal generalitet er ønsket.
- Liste: Liste-grensesnittet gir en måte å lagre den bestilte samlingen på. Det er et barnegrensesnitt til Collection.
- Tilfeldig tilgang: Dette er et markørgrensesnitt som brukes av listeimplementeringer for å indikere at de støtter rask (vanligvis konstant tid) tilfeldig tilgang.
Hvordan lage en stabel?
For å lage en stabel må vi importere java.util.stack pakke og bruk Stack()-konstruktøren for denne klassen. Eksempelet nedenfor lager en tom stabel.
Stabel stabel = ny stabel();
Her er E typen objekt.
Eksempel:
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> );> > }> }> |
Produksjon:
Pop Operation: 4 3 2 1 0 Element on stack top: 4 Element is found at position: 3 Element not found
Utføre ulike operasjoner på Stack-klassen
1. Legge til elementer: For å legge til et element i stabelen, kan vi bruke push() metode . Dette trykk() operasjon plasser elementet på toppen av stabelen.
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);> > }> }> |
Produksjon:
[4, All, Geeks] [Geeks, For, Geeks]
2. Få tilgang til elementet: For å hente eller hente det første elementet i stabelen eller elementet som er på toppen av stabelen, kan vi bruke kikke() metode. Elementet som hentes blir ikke slettet eller fjernet fra stabelen.
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);> > }> }> |
Produksjon:
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. Fjerning av elementer: For å hente et element fra stabelen, kan vi bruke pop() metode. Elementet sprettes fra toppen av stabelen og fjernes fra det samme.
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);> > }> }> |
Produksjon:
Initial Stack: [10, 15, 30, 20, 5] Popped element: 5 Popped element: 20 Stack after pop operation [10, 15, 30]
Eksempel
I Java er Stack-klassen en underklasse av Vector-klassen og representerer en sist-inn-først-ut (LIFO) stabel med objekter. Den utvider Vector-klassen for å tillate enkel implementering av stabeldatastrukturen.
Her er et eksempel på hvordan du kan bruke Stack-klassen i Java:
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());> > }> > }> }> |
Produksjon
4 3 2 1
I dette eksemplet importerer vi først Stack-klassen fra java.util-pakken. Vi lager deretter et nytt stabelobjekt kalt stack ved å bruke standardkonstruktøren. Vi skyver fire heltall på stabelen ved å bruke push()-metoden. Vi popper deretter elementene fra stabelen ved å bruke pop()-metoden inne i en while-løkke. Metoden isEmpty() brukes til å sjekke om stabelen er tom før du forsøker å åpne et element.
Denne koden lager en stabel med heltall og skyver 4 heltall inn på stabelen i rekkefølgen 1 -> 2 -> 3 -> 4. Deretter popper vi elementer fra stabelen en etter en ved å bruke pop()-metoden, som fjerner og returnerer toppelementet i stabelen. Siden stabelen følger en sist-inn-først-ut-rekkefølge (LIFO), blir elementene poppet i motsatt rekkefølge av innsetting, noe som resulterer i utgangen vist ovenfor.
Stack-klassen gir flere andre metoder for å manipulere stabelen, for eksempel peek() for å hente toppelementet uten å fjerne det, search() for å søke etter et element i stabelen og returnere dets posisjon, og size() for å returnere gjeldende element. størrelsen på stabelen. Stack-klassen gir også flere konstruktører for å lage en stabel med en spesifisert startkapasitet eller ved å kopiere en eksisterende stabel.
Metoder i Stack Class
| METODE | BESKRIVELSE |
|---|---|
| tømme() | Det returnerer sant hvis ingenting er på toppen av stabelen. Ellers returnerer falsk. |
| kikke() | Returnerer elementet på toppen av stabelen, men fjerner det ikke. |
| pop() | Fjerner og returnerer det øverste elementet i stabelen. Et «EmptyStackException» Et unntak blir kastet hvis vi kaller pop() når den påkallende stabelen er tom. |
| push(objektelement) | Skyver et element på toppen av stabelen. |
| søk (objektelement) | Den avgjør om det finnes et objekt i stabelen. Hvis elementet blir funnet, Den returnerer posisjonen til elementet fra toppen av stabelen. Ellers gir den -1. |
Metoder arvet fra klassen java.util.Vector
| METODE | BESKRIVELSE |
|---|---|
| add(Object obj) | Legger til det spesifiserte elementet til slutten av denne vektoren. |
| add(int index, Object obj) | Setter inn det spesifiserte elementet på den angitte posisjonen i denne vektoren. |
| addAll(Samling c) | Legger til alle elementene i den angitte samlingen til slutten av denne vektoren, i den rekkefølgen de returneres av den angitte samlingens iterator. |
| addAll(int index, samling c) | Setter inn alle elementene i den angitte samlingen i denne vektoren på den angitte posisjonen. |
| addElement(Object o) | Legger til den angitte komponenten på slutten av denne vektoren, og øker størrelsen med én. |
| kapasitet() | Returnerer gjeldende kapasitet til denne vektoren. |
| klar() | Fjerner alle elementene fra denne vektoren. |
| klone() | Returnerer en klon av denne vektoren. |
| inneholder(Objekt o) | Returnerer sann hvis denne vektoren inneholder det angitte elementet. |
| inneholder Alle (Samling c) | Returnerer sann hvis denne vektoren inneholder alle elementene i den angitte samlingen. |
| copyInto(Objekt []array) | Kopierer komponentene til denne vektoren inn i den angitte matrisen. |
| elementAt(int indeks) | Returnerer komponenten ved den angitte indeksen. |
| elementer() | Returnerer en oppregning av komponentene i denne vektoren. |
| sikreCapacity(int minCapacity) | Øker kapasiteten til denne vektoren, om nødvendig, for å sikre at den kan holde minst antallet komponenter spesifisert av minimumskapasitetsargumentet. |
| er lik() | Sammenligner det spesifiserte objektet med denne vektoren for likhet. |
| firstElement() | Returnerer den første komponenten (elementet ved indeks 0) av denne vektoren. |
| get (int indeks) | Returnerer elementet på den angitte posisjonen i denne vektoren. |
| hashkode() | Returnerer hash-kodeverdien for denne vektoren. |
| indeksOf(Objekt o) | Returnerer indeksen for den første forekomsten av det angitte elementet i denne vektoren, eller -1 hvis denne vektoren ikke inneholder elementet. |
| indexOf(Objekt o, int indeks) | Returnerer indeksen for den første forekomsten av det spesifiserte elementet i denne vektoren, søker fremover fra indeksen, eller returnerer -1 hvis elementet ikke blir funnet. |
| insertElementAt(Objekt o, int indeks) | Setter inn det angitte objektet som en komponent i denne vektoren ved den angitte indeksen. |
| er tom() | Tester om denne vektoren ikke har noen komponenter. |
| iterator() | Returnerer en iterator over elementene i denne listen i riktig rekkefølge. |
| lastElement() | Returnerer den siste komponenten i vektoren. |
| lastIndexOf(Objekt o) | Returnerer indeksen for siste forekomst av det angitte elementet i denne vektoren, eller -1 Hvis denne vektoren ikke inneholder elementet. |
| lastIndexOf(Objekt o, int indeks) | Returnerer indeksen for siste forekomst av det spesifiserte elementet i denne vektoren, søker bakover fra indeksen, eller returnerer -1 hvis elementet ikke blir funnet. |
| listIterator() | Returnerer en listeiterator over elementene i denne listen (i riktig rekkefølge). |
| listIterator(int index) | Returnerer en listeiterator over elementene i denne listen (i riktig rekkefølge), starter på den angitte posisjonen i listen. |
| remove(int index) | Fjerner elementet på den angitte posisjonen i denne vektoren. |
| fjern (Objekt o) | Fjerner den første forekomsten av det spesifiserte elementet i denne vektoren. Hvis vektoren ikke inneholder elementet, er den uendret. |
| removeAll(Samling c) | Fjerner fra denne vektoren alle dens elementer som finnes i den angitte samlingen. |
| removeAllElements() | Fjerner alle komponenter fra denne vektoren og setter størrelsen til null. |
| removeElement(Object o) | Fjerner den første (laveste indekserte) forekomsten av argumentet fra denne vektoren. |
| removeElementAt(int index) | Sletter komponenten ved den angitte indeksen. |
| removeRange(int fromIndex, int toIndex) | Fjerner fra denne listen alle elementene hvis indeks er mellom fromIndex, inklusive, og toIndex, exclusive. |
| retainAll(Samling c) | Beholder bare elementene i denne vektoren som finnes i den angitte samlingen. |
| sett(int indeks, objekt o) | Erstatter elementet på den angitte posisjonen i denne vektoren med det spesifiserte elementet. |
| setElementAt(Objekt o, int indeks) | Setter komponenten ved den angitte indeksen til denne vektoren til å være det spesifiserte objektet. |
| setSize(int newSize) | Angir størrelsen på denne vektoren. |
| størrelse() | Returnerer antall komponenter i denne vektoren. |
| subList(int fromIndex, int toIndex) | Returnerer en visning av delen av denne listen mellom fromIndex, inklusive, og toIndex, exclusive. |
| toArray() | Returnerer en matrise som inneholder alle elementene i denne vektoren i riktig rekkefølge. |
| toArray(Objekt []array) | Returnerer en matrise som inneholder alle elementene i denne vektoren i riktig rekkefølge; kjøretiden typen for den returnerte matrisen er den for den angitte matrisen. |
| toString() | Returnerer en strengrepresentasjon av denne vektoren, som inneholder strengrepresentasjonen av hvert element. |
| trimToSize() | Trimmer kapasiteten til denne vektoren til å være vektorens nåværende størrelse. |
Prioriter bruk av Om hva over Stack -:
Stack-klassen i Java er en eldre klasse og arver fra Vektor i Java . Det er en trådsikker klasse og involverer derfor overhead når vi ikke trenger trådsikkerhet. Det anbefales å bruke ArrayDeque for stackimplementering da det er mer effektivt i et enkelt-tråds miljø.
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());> > }> }> |
Produksjon:
B B
En annen grunn til å bruke Deque over Stack er at Deque har muligheten til å bruke strømmer som konverteres til liste med å beholde LIFO-konseptet brukt mens Stack ikke gjør det.
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(); } }> |
Produksjon
Using Stack - 1 2 Using Deque - 2 1