package javacodebook.collections.stack; import java.util.*; /** * Eine Implementierung eines Stapelspeichers. */ public class RealStack { private ArrayList dataArray; /** Erzeugt einen leeren Stapelspeicher. */ public RealStack() { dataArray = new ArrayList(); } /** Überprüft, ob der Stapel leer ist. */ public boolean empty() { return dataArray.isEmpty(); } /** Gibt das oberste Element vom Stapel zurück, ohne es zu entfernen. */ public Object peek() { if(dataArray.isEmpty()) throw new EmptyStackException(); return dataArray.get(dataArray.size()-1); } /** Gibt das oberste Element zurück und entfernt es vom Stapel. */ public Object pop() { if(dataArray.isEmpty()) throw new EmptyStackException(); Object o = dataArray.get(dataArray.size()-1); dataArray.remove(dataArray.size() -1); return o; } /** Legt ein Objekt oben auf dem Stapel ab. */ public Object push(Object item) { dataArray.add(item); return item; } /** Sucht ein Objekt im Stapel. Als Rückgabewert wird seine Position * zurückgegeben, oder -1, wenn das Objekt nicht gefunden wurde. * Die Zählung beginnt bei 1 für das oberste Element und wird hochgezählt, * je tiefer das Objekt im Stapel liegt. */ public int search(Object o) { for(int i = dataArray.size()-1; i >= 0; i--) { if(o.equals(dataArray.get(i))) return dataArray.size() - i; } return -1; } /** Gibt die Anzahl der Elemente im Stapel zurück. */ public int size() { return dataArray.size(); } } --- Neue Klasse --- package javacodebook.collections.stack; public class UseStack { public static void main(String[] args) { RealStack stack = new RealStack(); if(stack.empty()) System.out.println("Noch ist er leer"); String s = "Der erste Wert"; stack.push(s); int pos = stack.search(s); System.out.println("Wert gefunden an Position " + pos); stack.push("Der zweite Wert"); System.out.println("Der Stack enthält jetzt " + stack.size() + " Werte"); pos = stack.search(s); System.out.println("Wert gefunden an Position " + pos); s = (String)stack.peek(); System.out.println(s); s = (String)stack.pop(); System.out.println(s); s = (String)stack.pop(); System.out.println(s); //Hier wird eine EmptyStackException provoziert s = (String)stack.pop(); } }