Stacks / Stapel

Stacks (oder auch Stapel– oder Kellerspeicher) arbeiten strikt nach dem Last-in-first-out-Prinzip und können daher in gewisser Weise als Gegestück zu Queues angesehen werden.
Das Last-in-first-out-Prinzip besagt, dass man immer nur auf das zuletzt hinzugefügt Objekt einen Zugriff hat und auch nur dieses wieder entfernen kann.

Die Methode zum  Hinzufügen eines Objekts nennt man bei Stacks taditionell push und die zum Entfernen pop:

Stapel von Schukartons
Hier werden Schukartons gestapelt.

Sehen wir uns eine Übersicht über die Methoden eines Stacks an. Hier sollte uns auffallen, dass diese Klasse – wie die Abiturklasse Queue – generisch ist. Es können also nur Objekte der vorgegebenen Klasse ContentType eingefügt werden.

Stack()  Ein leerer Stack wird erzeugt.
boolean isEmpty() Liefert true, wenn der Stack leer ist. Sonst wird false geliefert.
void push(ContenType pContent) Das Objekt pContent wird auf den Stack gelegt. Sollte es jedoch null sein, passiert nichts.
void pop() Das oberste Objekt wird entfernt. Ist der Stack schon leer, passiert nichts.
ContentType top() Liefert das oberste Objekt. Ist der Stack leer, wird null geliefert.

Betrachten wir auch eine kleine Beispielanwendung. Dazu verwenden wir diese Klasse:

public class Schuhkarton{

  private double groesse;
  private double preis;
  private String farbe;

  public Schuhkarton(double pGroesse, double pPreis, String pFarbe){
    groesse = pGroesse;
    preis = pPreis;
    farbe = pFarbe;
  }

  public double getGroesse(){
    return groesse;
  }

  public double getPreis(){
    return preis;
  }

  public String getFarbe(){
    return farbe;
  }

}

Mit dieser Klasse können wir dann dieses Beispiel erstellen:

public class BeispielStack {

    public static void main(String[] args) {
        
        Stack<Schuhkarton> meinStapel = new Stack();
        
        meinStapel.push(new Schuhkarton(41, 59.90, "schwarz"));
        meinStapel.push(new Schuhkarton(42.5, 59.90, "schwarz"));
        meinStapel.push(new Schuhkarton(40, 59.90, "braun"));
        meinStapel.push(new Schuhkarton(43, 59.90, "schwarz"));
        
        while(!meinStapel.isEmpty()){
            System.out.println(meinStapel.top().getGroesse());
            meinStapel.pop();
        }
        
    }
    
}

In der Konsole werden dann die eingefügten Schuhgrößen in umgekehrter Reihenfolge wieder ausgegeben.