Zum Inhalt springen

Java-Deque-Implementierungen – Welche einsetzen?

Fahrbahnmarkierung mit Pfeilen nach links, geradeaus und rechts

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-blockingFairness PolicyBounded/ UnboundedIterator 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 dir dieser Artikel gefallen hat, freue ich mich über eine Bewertung auf meinem ProvenExpert-Profil.

👉 Bewertung abgeben

Und wenn du keinen neuen Artikel verpassen möchtest, klicke hier und melde dich für den HappyCoders-Newsletter an.

👉 Newsletter-Anmeldung

Datenstrukturen wirklich verstehen?

Dieser Artikel zeigt eine Datenstruktur. „Mastering Data Structures in Java“ zeigt dir alle – und vor allem, wann du welche einsetzt und warum das über die Laufzeit deiner Anwendung entscheidet.

Der Premium-Online-Kurs ist gerade geschlossen. Auf der Warteliste erfährst du als Erste:r, wenn er wieder öffnet – und bekommst das Angebot vor allen anderen.

Zur Warteliste

Werde ein:e bessere:r Java-Entwickler:in

Mit meinem kostenlosen Newsletter bleibst du vorn. Modernes Java: neue Versionen & Features, Performance und JVM-Insights – 1x im Monat.

Suche