Java Deque Implementations - Which one to use?Java Deque Implementations - Which one to use?
HappyCoders Glasses

Java Deque Implementierungen - Welche einsetzen?

Sven Woltmann
Sven Woltmann
Aktualisiert: 7. Juni 2022

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.

KlasseThread-
sicher?
Blocking/
Non-blocking
Fairness
Policy
Bounded/
Unbounded
Iterator Type
ArrayDequeNeinNon-blockingUnboundedFail-fast¹
LinkedListNeinNon-blockingUnboundedFail-fast¹
ConcurrentLinkedDequeJa
(optimistisches Locking durch Compare-and-set)
Non-blockingUnboundedWeakly consistent²
LinkedBlockingDequeJa
(pessimistisches Locking mit einem Lock)
BlockingNicht verfügbarBoundedWeakly 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 Anwendungen
  • ConcurrentLinkedDeque als threadsicheres, nicht blockierendes und unbounded Deque
  • LinkedBlockingDeque als threadsicheres, blockierendes, bounded Deque

Hier meine Empfehlung noch einmal als Entscheidungsbaum:

Entscheidungsbaum Java Deque-Implementierungen
Entscheidungsbaum Java Deque-Implementierungen

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.