Zusammenfassung
Nach dem Erlernen von Vektor werden wir beginnen, Stapel zu lernen. Stack ist einfach, er erbt vom Vektor. Die Lernmethode ist immer noch die gleiche wie zuvor. Erstens ein ganzheitliches Verständnis von Stack und lernen Sie dann seinen Quellcode. Lernen Sie schließlich, es anhand von Beispielen zu verwenden.
Stack ist der Stapel. Seine Eigenschaften sind: zuerst in und zuletzt (Filo, zuerst im letzten Out).
Stapel im Java -Toolkit wird von Vector (Vector Wartee) geerbt. Da Vector über Arrays implementiert wird, bedeutet dies, dass Stack auch über Arrays implementiert wird, nicht über verknüpfte Listen. Natürlich können wir LinkedList auch als Stapel verwenden! In "detaillierte Einführung in Vektor (Quellcodeanalyse) und Verwendungsbeispiele für die Java -Sammlungsreihe 06" wurde die Datenstruktur des Vektors ausführlich eingeführt, und die Datenstruktur des Stacks wird hier nicht erläutert.
java.lang.object
↳ java.util.abstractCollection <e>
↳ java.util.abstractList <e>
↳ java.util.Vector <e>
↳ java.util.stack <e>
Public Class Stack <E> erweitert Vector <e> {}
Die Beziehung zwischen Stack und Sammlung ist wie folgt:
Stack hat nur einen Standardkonstruktor wie folgt:
Stapel()
Stacks API
Stack ist der Stapel und seine häufig verwendete API ist wie folgt:
boolean leer ()
synchronisierte e peek ()
Synchronisierte e pop ()
E Push (e Objekt)
Synchronisierte Int -Suche (Objekt O)
Da Stack und Erben von Vektor erben, enthält es auch alle APIs in Vector.
Der Quellcode von Stack ist sehr einfach. Lernen wir ihn unten.
Paket java.util; publicClass stack <e> erweitert Vector <e> {// Version ID. Dies wird für die Version des Versions -Upgrade verwendet, sodass Sie hier nicht darauf achten müssen! Private statische endgültige lange Serialversionuid = 1224463164541339165L; // Constructor Public Stack () {} // Push -Funktion: Sparen Sie Elemente auf der Oberseite des Stack Public E Push (E -Element) {// Elemente auf der Oberseite des Stapels speichern. // Die Implementierung von AddElement () befindet sich in vector.java addelement (item); Gegenstand zurückgeben; } // Pop -Funktion: Geben Sie das oberste Element des Stapels zurück und löschen Sie es aus dem stapelischen öffentlichen synchronisierten E pop () {e obj; int len = size (); obj = peek (); // Das obere Element des Stapels löschen, removeLementat () ist in Vector.java REMETELEMENTAT (LEN - 1); Rückkehr obj; } // Peek -Funktion: Geben Sie das obere Element des Stapels ohne Löschbetrieb public synchronisierte e peek () {int len = size () zurück; if (len == 0) werfen neue leereStackexception (); // Rückgabe des oberen Elements des Stacks, Elementat () wird in vector.java implementiert. return elementat (len - 1); } // ob der Stapel leer ist, öffentlich boolean leer () {return size () == 0; } // Finden Sie die Position von "Element O" im Stapel: Vom Boden des Stapels bis zum oberen Rand des Stapels. Die öffentliche synchronisierte Int -Suche (Objekt o) {// Erhalten Sie den Element Index, Elementat () in vector.java. int i = lastIndexof (o); if (i> = 0) {return size () - i; } return -1; }} (01) Stack wird tatsächlich über Arrays implementiert.
Wenn Push ausgeführt wird (dh das Push das Element in den Stapel), wird das Element bis zum Ende des Arrays angemeldet.
Beim Ausführen von Peek (dh das obere Element auf dem Stapel wird entfernt und es wird keine Löschung durchgeführt) ist es das Element, das das Ende des Arrays zurückgibt.
Beim Ausführen eines POP (d. H. Das obere Element auf dem Stapel herausnehmen und das Element aus dem Stapel entfernt), wird das Element am Ende des Arrays herausgenommen und dann das Element aus dem Array löschen.
(02) Stack erbt von Vektor, was bedeutet, dass sowohl die Eigenschaften als auch die Funktionen, die Vektor hat, Stack besitzt.
Im Folgenden lernen wir, wie man Stack anhand von Beispielen verwendet
Import Java.util.stack; Import Java.util.iterator; Import Java.util.List;/*** @Desc Stacks Testprogramm. Testen Sie die Verwendung von gemeinsamen APIs * * @author Skywang */public class stackTest {public static void main (String [] args) {stack stack = new Stack (); // 1,2,3,4,5 zum Stapel für (int i = 1; i <6; i ++) {stack.push (String.ValueOf (i)) hinzufügen; } // Überqueren und drucken Sie den Stapel iteratory Throughrandomaccess (Stack) aus; // Die Position von "2" im Stapel und Ausgabe int pos = stack.search ("2") finden; System.out.println ("Der Beitrag von 2 ist:"+pos); // nach dem PUP -Stack -Top -Element, Traverse Stack.pop (); iteratorthroughrandomaccess (Stack); // Nach dem Peek Stack Top -Element, Traverse Stack String val = (String) stack.peek (); System.out.println ("peek:"+val); iteratorthroughrandomaccess (Stack); // durch Iterator durch Iterator durchtragen; } / ** * Stapel durch Schnellzugriff * / public static void iteratorthroughrandomaccess (Listliste) {String val = null; für (int i = 0; i <list.size (); i ++) {val = (String) list.get (i); System.out.print (Val+""); } System.out.println (); } / ** * durch einen Iterator Iterator * / public static void iteratorthroughiterator (Liste) {String val = null; für (iterator iter = list.iterator (); iter.hasnext ();) {val = (string) iter.next (); System.out.print (Val+""); } System.out.println (); }}Auslaufergebnisse:
1 2 3 4 5
Die Position von 2 ist: 4
1 2 3 4
Peek: 4
1 2 3 4
1 2 3 4