Der Stack ist eine der wichtigsten Datenstrukturen in der Java-Sprache. Seine Implementierung sollte mindestens die folgenden Methoden umfassen:
1. pop() Pop-Operation, Pop das oberste Element des Stapels.
2.Push(E e) Push-Betrieb
3.peek() Zeigt das oberste Element des Stapels an
4.isEmpty() Ist der Stapel leer?
Darüber hinaus sollten bei der Implementierung eines Stacks mehrere Aspekte berücksichtigt werden:
1. Die anfängliche Größe des Stapels und wie man neuen Stapelplatz hinzufügt, nachdem der Stapel voll ist
2. Beim Aktualisieren des Stapels ist eine Synchronisierung erforderlich
Ein einfaches Beispiel für die Verwendung eines Arrays zum Implementieren eines Stapels. Der Code lautet wie folgt:
Kopieren Sie den Codecode wie folgt:
öffentliche Klasse Stack<E> {
// Java unterstützt keine generischen Arrays. Wenn Sie diese verwenden müssen, verwenden Sie bitte den von Java bereitgestellten Container.
privater Object[]-Stapel;
//Standardanfangsgröße des Stapels
privates statisches final int INIT_SIZE = 2;
//Stack-Top-Index
privater int-Index;
publicStack() {
stack = neues Objekt[INIT_SIZE];
Index = -1;
}
/**
*Bauweise
*
* @param initSize
* Anfangsgröße des Stapels
*/
public Stack(int initSize) {
if (initSize < 0) {
throw new IllegalArgumentException();
}
stack = new Object[initSize];
Index = -1;
}
/**
* Pop-Betrieb
*
* @return oberstes Stapelobjekt
*/
öffentliches synchronisiertes E-Pop() {
if (!isEmpty()) {
E temp = peek();
stack[index--] = null;
Rücklauftemperatur;
}
null zurückgeben;
}
/**
* Push-Bedienung
*
* @param obj
* Objekt wartet darauf, auf den Stapel geschoben zu werden
*/
öffentlicher synchronisierter void push(E obj) {
if (isFull()) {
Object[] temp = stack;
// Wenn der Stapel voll ist, erstellen Sie einen Stapel mit dem Doppelten des aktuellen Stapelplatzes
stack = new Object[2 * stack.length];
System.arraycopy(temp, 0, stack, 0, temp.length);
}
stack[++index] = obj;
}
/**
* Sehen Sie sich das oberste Objekt auf dem Stapel an
*
* @return oberstes Stapelobjekt
*/
public E peek() {
if (!isEmpty()) {
return (E) stack[index];
}
null zurückgeben;
}
/**
* Überprüfen Sie, ob der Stapel leer ist
*
* @return Gibt „true“ zurück, wenn der Stapel leer ist, andernfalls wird „false“ zurückgegeben
*/
öffentlicher boolescher Wert isEmpty() {
Rückgabeindex == -1;
}
/**
* Überprüfen Sie, ob der Stapel voll ist
*
* @return Gibt „true“ zurück, wenn der Stapel voll ist, andernfalls wird „false“ zurückgegeben
*/
öffentlicher boolescher Wert isFull() {
Rückgabeindex >= stack.length - 1;
}
}
Schließlich wird die Datenstruktur des Stapels (java.util.Stack) durch die Vererbung der Vector-Klasse implementiert. Unter normalen Umständen können wir sie einfach verwenden.