In J2SE6 wurde die Arraydeque -Klasse eingeführt, die die Grenzfläche zwischen Deque (bidirektionale Warteschlange) erbt. Mit dieser Klasse können Sie die Funktionen der java.util.stack-Klasse selbst implementieren und die Multi-Thread-Synchronisationsfunktion von Java.util.Stack entfernt.
Erstellen Sie beispielsweise einen Stapel, der den Ganzzahltyp speichert, einfach eine Variable der Arraydeque -Klasse als Eigenschaft in der Klasse erstellen und dann als Stapel definieren und den Stapel eingeben und die Elemente oben im Stack beobachten, und betreiben Sie die Instanzvariable des ArrayDeque direkt.
Import Java.util.ArrayDequ; import Java.util.dequ; public class integerStack {private deque <integer> data = new ArrayDequ <Integer> (); public void push (Ganzzahlelement) {data.addfirst (Element); } public Integer pop () {return Data.removeFirst (); } public Integer peek () {return data.peekfirst (); } public String toString () {return Data.toString (); } public static void main (String [] args) {inGentack stack = new inGentStack (); für (int i = 0; i <5; i ++) {stack.push (i); } System.out.println (Stack); System.out.println ("nach 5 Elementen gedrückt:" + stapel); int m = stack.pop (); System.out.println ("poped element =" + m); System.out.println ("Nachdem 1 Element gepoppt hat:" + Stack); int n = stack.peek (); System.out.println ("peeked element =" + n); System.out.println ("Nach dem Peeking 1 Element:" + Stack); }} Quellcode von Java.util.Arraydeque:
private transiente E [] Elemente; privater transienter Int -Kopf; privates transientes Int -Schwanz; /*Der Ort, an dem E hier gespeichert wird, wird aus der letzten Position des Elements Array gespeichert*/ public void addfirst (e e) {if (e == null) wirf eine neue nullpointerexception (); Elemente [Head = (Kopf - 1) & (Elemente.Length - 1)] = e; // Die Standardeinstellung für die erste Array -Kapazität beträgt 16, Kopf = (0-1) & (16-1) = 15 if (head == tail) doubleCapacity (); } /*Jedes Mal, wenn die Kapazität erweitert wird, wird sie in der Reihenfolge der Insertion wieder in ein neues Array eingebaut und der neueste Eingefügte wird an der ersten Position des Arrays platziert. */ private void doublecapacity () {Assert Head == Tail; int p = Kopf; int n = Elemente.Length; int r = n - p; // Anzahl der Elemente rechts von p int newcapacity = n << 1; wenn (Newcapacity <0) neue IllegalStateException ("Entschuldigung, Deque zu groß"); Objekt [] a = neues Objekt [Newcapacity]; System.ArrayCopy (Elemente, P, A, 0, R); System.ArrayCopy (Elemente, 0, a, r, p); Elemente = (e []) a; Kopf = 0; schwanz = n; } public e removeFirst () {e x = polfirst (); if (x == null) werfen neue noSuchelementException (); Rückkehr x; } public e pollfirst () {int H = Kopf; E result = Elemente [h]; // Element ist null, wenn Deque leer ist, wenn (result == null) NULL zurückgeben; Elemente [h] = null; // Setzen Sie diese Position im Array nach Null zurück, um eine bequeme Müllsammlung zu erhalten. head = (h + 1) & (Elemente.Length - 1); // Umgekehrt den Wert des Kopfes, der dem Zeiger des Stapels ein Raster entspricht. Zum Beispiel 12-〉 13 Rückgabeergebnis; } public e peekfirst () {return Elements [Kopf]; // Elemente [Kopf] ist null, wenn deque leer}Das obige dreht sich alles um diesen Artikel. Ich hoffe, dass es für alle hilfreich sein wird, Java -Programme zu lernen.