Wofür wird heute noch die Stack Klasse in Java genutzt

kossy

Bekanntes Mitglied
Hallo nochmal !

Ich hätte nochmal eine weitere interessante Frage für mich. Bei den Collections ist ja die Klasse Stack eine Unterklasse von Vector.

Benutzt man diese Klasse Stack heute eigentlich noch großartig? Oder ist sie mittlerweile aufgrund ihrer FIFO Prinzip veraltet?

Grüße und Danke für die Hilfe !

Kossy
 
Wenn man einen Stack für bestimmte Algorithmen benötigt dann nimmt man einen, einfaches Beispiel iterative Tiefensuche, Matheausdrücke auswerten etc. Die Stack-Klasse verwendet IMHO die ganzen synchronisierten Methoden von Vector, wenn man das nicht möchte kann man auch eine Klasse verwenden die das Interface Deque implementert und mit den Methoden addFirst() removeFirst() arbeiten.
 
Ein Stack ist LIFO, nicht FIFO.

Auf die Anwendungen ist ThreadPool ja schon eingegangen. Mehr Beispiele gibt es z. B. in der Wikipedia.

[...] kann man auch eine Klasse verwenden die das Interface Deque implementert und mit den Methoden addFirst() removeFirst() arbeiten.

Die Dokumentation zu [c]Stack[/c] empfiehlt das sogar: A more complete and consistent set of LIFO stack operations is provided by the Deque interface and its implementations, which should be used in preference to this class.

Das Interface bietet übrigens auch die Methoden [c]push()[/c] und [c]pop()[/c], die ich persönlich bei einem Stack intuitiver finde.
 
Beispiel:

Java:
import java.util.*;

class StackDemo {
static void showpush(Stack st, int a) {
 st.push(new Integer(a));
 System.out.println("push(" + a + ")");
 System.out.println("stack: " + st);
}

static void showpop(Stack st) {
System.out.print("pop -> ");
Integer a = (Integer) st.pop();
System.out.println(a);
System.out.println("stack: " + st);
}

public static void main(String args[]) {
 Stack st = new Stack();
 System.out.println("stack: " + st);
 showpush(st, 42);
 showpush(st, 66);
 showpush(st, 99);
 showpop(st);
 showpop(st);
 showpop(st);
try { 
 showpop(st);
} catch (EmptyStackException e) {
  System.out.println("empty stack");
}
}
}


Ausgabe:

stack: [ ]
push(42)
stack: [42]
push(66)
stack: [42, 66]
push(99)
stack: [42, 66, 99]
pop -> 99
stack: [42, 66]
pop -> 66
stack: [42]
pop -> 42
stack: [ ]
pop -> empty stack


Best regards,
 
fifo, lifo usw können doch garnicht veralten. es gibt immer noch algorithmen so sowas praktischer und schneller ist als andere listen
 

Zurück
Oben