

In den vergangenen Teilen dieser Tutorialserie hast du alle Deque-Implementierungen des JDK kennengelernt. In diesem Artikel gebe ich dir eine Entscheidungshilfe, wann du welche Implementierung einsetzen solltest.
In der Tabelle ist der Name des Deques jeweils mit dem Teil der Serie verlinkt, in dem dieses Deques mit seinen spezifischen Eigenschaften vorgestellt wird.
Erläuterungen zu den Begriffen blocking, non-blocking, fairness policy, bounded und unbounded findest du im Artikel über das BlockingQueue-Interface.
Klasse | Thread- sicher? | Blocking/ Non-blocking | Fairness Policy | Bounded/ Unbounded | Iterator Type |
---|---|---|---|---|---|
ArrayDeque | Nein | Non-blocking | — | Unbounded | Fail-fast¹ |
LinkedList | Nein | Non-blocking | — | Unbounded | Fail-fast¹ |
ConcurrentLinkedDeque | Ja (optimistisches Locking durch Compare-and-set) | Non-blocking | — | Unbounded | Weakly consistent² |
LinkedBlockingDeque | Ja (pessimistisches Locking mit einem Lock) | Blocking | Nicht verfügbar | Bounded | Weakly consistent² |
¹ Fail-fast: Der Iterator wirft eine ConcurrentModificationException
, wenn während der Iteration Elemente in das Deque eingefügt oder aus diesem entnommen werden.
² Weakly consistent: Alle Elemente, die zum Zeitpunkt der Erzeugung des Interators im Deque liegen, werden vom Iterator genau einmal durchlaufen. Änderungen, die danach erfolgen, können – müssen aber nicht – durch den Iterator berücksichtigt werden.
Wann solltest du welche Deque-Implementierung verwenden?
Anhand der in den vorherigen Teilen der Serie erklärten und in der Tabelle oben zusammengefassten Eigenschaften kannst du für deinen speziellen Einsatzzweck das richtige Deque auswählen.
Meine Empfehlungen lauten:
ArrayDeque
für single-threaded AnwendungenConcurrentLinkedDeque
als threadsicheres, nicht blockierendes und unbounded DequeLinkedBlockingDeque
als threadsicheres, blockierendes, bounded Deque
Hier meine Empfehlung noch einmal als Entscheidungsbaum:

Wahrscheinlich fällt dir auf, dass hier die LinkedList
fehlt. Das liegt daran, dass ich grundsätzlich davon abrate LinkedList als Deque einzusetzen.
Zusammenfassung und Ausblick
In diesem Artikel habe ich einen Überblück über alle Deque-Implementierungen gegeben sowie eine Entscheidungshilfe, wann du welche Implementierung einsetzen solltest.
Im nächsten Teil zeige ich dir, wie du mit einem Array ein Deque selbst implementieren kannst.
Wenn du noch Fragen hast, stelle sie gerne über die Kommentar-Funktion. Möchtest du über neue Tutorials und Artikel informiert werden? Dann klicke hier, um dich für den HappyCoders.eu-Newsletter anzumelden.