Java Stack-Klasse – Umfassender Leitfaden zu Verwendung und Methoden
Java Stack-Klasse
Dieses Tutorial erklärt Javas Stack-Klasse, ihre Kernmethoden und praktische Beispiele, um Stack-Operationen zu meistern.
Das Java Collections Framework enthält eine Stack-Klasse, die die klassische Stack-Datenstruktur implementiert. Laut der offiziellen Java-Dokumentation erweitert Stack die Klasse Vector und erbt alle deren Methoden, während sie stack-spezifische Operationen hinzufügt.

Stack-Implementierung
Ein Stack folgt dem Last In, First Out-Prinzip (LIFO): Elemente werden oben auf den Stack gelegt (push) und von oben entfernt (pop). Das folgende Diagramm veranschaulicht dieses Verhalten.

Stack erstellen
Um einen Stack zu erstellen, importieren Sie java.util.Stack und instanziieren ihn mit dem gewünschten generischen Typ:
Stack<Type> stack = new Stack<>();
Beispiele:
// Integer-Stack Stack<Integer> intStack = new Stack<>(); // String-Stack Stack<String> stringStack = new Stack<>();
Stack-Methoden
Neben den geerbten Vector-Methoden bietet Stack fünf dedizierte Operationen, die es von generischen Collections unterscheiden. Für eine vollständige Liste der Vector-Methoden siehe die Vector-Klassen-Dokumentation.
push()-Methode
Die push()-Methode fügt ein Element oben auf dem Stack hinzu.
import java.util.Stack; class Main { public static void main(String[] args) { Stack<String> animals = new Stack<>(); animals.push("Dog"); animals.push("Horse"); animals.push("Cat"); System.out.println("Stack: " + animals); } }
Ausgabe
Stack: [Dog, Horse, Cat]
pop()-Methode
Die pop()-Methode entfernt das oberste Element und gibt es zurück.
import java.util.Stack; class Main { public static void main(String[] args) { Stack<String> animals = new Stack<>(); animals.push("Dog"); animals.push("Horse"); animals.push("Cat"); System.out.println("Initial Stack: " + animals); String removed = animals.pop(); System.out.println("Removed Element: " + removed); } }
Ausgabe
Initial Stack: [Dog, Horse, Cat] Removed Element: Cat
peek()-Methode
Die peek()-Methode ruft das oberste Element ab, ohne es zu entfernen.
import java.util.Stack; class Main { public static void main(String[] args) { Stack<String> animals = new Stack<>(); animals.push("Dog"); animals.push("Horse"); animals.push("Cat"); System.out.println("Stack: " + animals); String top = animals.peek(); System.out.println("Element at top: " + top); } }
Ausgabe
Stack: [Dog, Horse, Cat] Element at top: Cat
search()-Methode
Die search()-Methode gibt die 1-basierte Position eines Elements vom Stack-Top zurück, oder -1, falls es nicht vorhanden ist.
import java.util.Stack; class Main { public static void main(String[] args) { Stack<String> animals = new Stack<>(); animals.push("Dog"); animals.push("Horse"); animals.push("Cat"); System.out.println("Stack: " + animals); int pos = animals.search("Horse"); System.out.println("Position of Horse: " + pos); } }
Ausgabe
Stack: [Dog, Horse, Cat] Position of Horse: 2
empty()-Methode
Die empty()-Methode prüft, ob der Stack Elemente enthält.
import java.util.Stack; class Main { public static void main(String[] args) { Stack<String> animals = new Stack<>(); animals.push("Dog"); animals.push("Horse"); animals.push("Cat"); System.out.println("Stack: " + animals); boolean isEmpty = animals.empty(); System.out.println("Is the stack empty? " + isEmpty); } }
Ausgabe
Stack: [Dog, Horse, Cat] Is the stack empty? false
ArrayDeque statt Stack verwenden
Obwohl Stack einen Stack implementiert, gilt es als Legacy. Moderner Java-Code bevorzugt ArrayDeque (implementiert das Deque-Interface) für Stack-Funktionalität, da es bessere Performance und klarere Semantik bietet. Weitere Details finden Sie unter:
Java
- Javas final-Schlüsselwort verstehen: Variablen, Methoden und Klassen
- Java instanceof-Operator: Ein umfassender Leitfaden
- Java-Vererbung meistern: Konzepte, Typen und praktische Beispiele
- Java statische verschachtelte Klassen verstehen: Nutzung, Unterschiede und Beispiele
- Java anonyme innere Klassen meistern: Definition, Syntax und praktische Beispiele
- Java Singleton-Pattern erklärt: Sichere Implementierung und Verwendung
- Java Reflection meistern: Klassen, Methoden und Felder zur Laufzeit inspizieren
- Java ObjectOutputStream meistern: Serialisierung, Methoden und praktische Beispiele
- Java Generics meistern – Wiederverwendbaren, typsicheren Code erstellen
- Java-Dateioperationen mit java.io meistern – Erstellen, Lesen, Schreiben & Löschen