{"id":30786,"date":"2022-06-07T22:08:32","date_gmt":"2022-06-07T20:08:32","guid":{"rendered":"https:\/\/www.happycoders.eu\/?p=30786"},"modified":"2024-12-02T12:00:26","modified_gmt":"2024-12-02T11:00:26","slug":"java-deque-implementierungen","status":"publish","type":"post","link":"https:\/\/www.happycoders.eu\/de\/algorithmen\/java-deque-implementierungen\/","title":{"rendered":"Java Deque Implementierungen \u2013 Welche einsetzen?"},"content":{"rendered":"\n<p>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. <\/p>\n\n\n\n<p>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.<\/p>\n\n\n\n<p>Erl\u00e4uterungen zu den Begriffen <em>blocking<\/em>, <em>non-blocking<\/em>, <em>fairness policy<\/em>, <em>bounded<\/em> und <em>unbounded<\/em> findest du im Artikel \u00fcber das <a href=\"\/de\/algorithmen\/java-blockingqueue\/\">BlockingQueue-Interface<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes less-line-height font-size-95\"><table><thead><tr><th>Klasse<\/th><th class=\"has-text-align-center\" data-align=\"center\">Thread-<br>sicher?<\/th><th class=\"has-text-align-center\" data-align=\"center\">Blocking\/<br>Non-blocking<\/th><th class=\"has-text-align-center\" data-align=\"center\">Fairness<br>Policy<\/th><th class=\"has-text-align-center\" data-align=\"center\">Bounded\/<br>Unbounded<\/th><th class=\"has-text-align-center\" data-align=\"center\">Iterator Type<\/th><\/tr><\/thead><tbody><tr><td><a href=\"\/de\/algorithmen\/arraydeque-java\/\">ArrayDeque<\/a><\/td><td class=\"has-text-align-center\" data-align=\"center\">Nein<\/td><td class=\"has-text-align-center\" data-align=\"center\">Non-blocking<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u2014<\/td><td class=\"has-text-align-center\" data-align=\"center\">Unbounded<\/td><td class=\"has-text-align-center\" data-align=\"center\">Fail-fast\u00b9<\/td><\/tr><tr><td><a href=\"\/de\/algorithmen\/linkedlist-java\/\">LinkedList<\/a><\/td><td class=\"has-text-align-center\" data-align=\"center\">Nein<\/td><td class=\"has-text-align-center\" data-align=\"center\">Non-blocking<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u2014<\/td><td class=\"has-text-align-center\" data-align=\"center\">Unbounded<\/td><td class=\"has-text-align-center\" data-align=\"center\">Fail-fast\u00b9<\/td><\/tr><tr><td><a href=\"\/de\/algorithmen\/concurrentlinkeddeque-java\/\">ConcurrentLinkedDeque<\/a><\/td><td class=\"has-text-align-center\" data-align=\"center\">Ja<br><span style=\"font-size:90%\">(optimistisches Locking durch Compare-and-set)<\/span><\/td><td class=\"has-text-align-center\" data-align=\"center\">Non-blocking<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u2014<\/td><td class=\"has-text-align-center\" data-align=\"center\">Unbounded<\/td><td class=\"has-text-align-center\" data-align=\"center\">Weakly consistent\u00b2<\/td><\/tr><tr><td><a href=\"\/de\/algorithmen\/linkedblockingdeque-java\/\">LinkedBlockingDeque<\/a><\/td><td class=\"has-text-align-center\" data-align=\"center\">Ja<br><span style=\"font-size:90%\">(pessimistisches Locking mit einem Lock)<\/span><\/td><td class=\"has-text-align-center\" data-align=\"center\">Blocking<\/td><td class=\"has-text-align-center\" data-align=\"center\">Nicht verf\u00fcgbar<\/td><td class=\"has-text-align-center\" data-align=\"center\">Bounded<\/td><td class=\"has-text-align-center\" data-align=\"center\">Weakly consistent\u00b2<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"hc-footnote\">\u00b9 Fail-fast: Der Iterator wirft eine <code>ConcurrentModificationException<\/code>, wenn w\u00e4hrend der Iteration Elemente in das Deque eingef\u00fcgt oder aus diesem entnommen werden.<\/p>\n\n\n\n<p class=\"hc-footnote\">\u00b2 Weakly consistent: Alle Elemente, die zum Zeitpunkt der Erzeugung des Interators im Deque liegen, werden vom Iterator genau einmal durchlaufen. \u00c4nderungen, die danach erfolgen, k\u00f6nnen \u2013 m\u00fcssen aber nicht \u2013 durch den Iterator ber\u00fccksichtigt werden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"wann-solltest-du-welche-deque-implementierung-verwenden\">Wann solltest du welche Deque-Implementierung verwenden?<\/h2>\n\n\n\n<p>Anhand der in den vorherigen Teilen der Serie erkl\u00e4rten und in der Tabelle oben zusammengefassten Eigenschaften kannst du f\u00fcr deinen speziellen Einsatzzweck das richtige Deque ausw\u00e4hlen.<\/p>\n\n\n\n<p>Meine Empfehlungen lauten:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><code>ArrayDeque<\/code> f\u00fcr <strong>single-threaded<\/strong> Anwendungen<\/li><li><code>ConcurrentLinkedDeque<\/code> als <strong>threadsicheres, nicht blockierendes<\/strong> und unbounded Deque<\/li><li><code>LinkedBlockingDeque<\/code> als <strong>threadsicheres, blockierendes<\/strong>, bounded Deque<\/li><\/ul>\n\n\n\n<p>Hier meine Empfehlung noch einmal als Entscheidungsbaum:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full_800\"><img decoding=\"async\" width=\"800\" height=\"257\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-deque-implementierungen-800x257.png\" alt=\"Entscheidungsbaum Java Deque-Implementierungen\" class=\"wp-image-30790\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-deque-implementierungen-800x257.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-deque-implementierungen-224x72.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-deque-implementierungen-336x108.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-deque-implementierungen-504x162.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-deque-implementierungen-672x216.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-deque-implementierungen-400x129.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-deque-implementierungen-600x193.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-deque-implementierungen-944x303.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-deque-implementierungen-1200x386.png 1200w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-deque-implementierungen.png 1600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><figcaption>Entscheidungsbaum Java Deque-Implementierungen<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Wahrscheinlich f\u00e4llt dir auf, dass hier die <code>LinkedList<\/code> fehlt. Das liegt daran, dass ich <a href=\"\/de\/algorithmen\/linkedlist-java\/#einsatzempfehlung-als-deque\">grunds\u00e4tzlich davon abrate LinkedList als Deque einzusetzen<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"zusammenfassung-und-ausblick\">Zusammenfassung und Ausblick<\/h2>\n\n\n\n<p>In diesem Artikel habe ich einen \u00dcberbl\u00fcck \u00fcber alle Deque-Implementierungen gegeben sowie eine Entscheidungshilfe, wann du welche Implementierung einsetzen solltest.<\/p>\n\n\n\n<p>Im n\u00e4chsten Teil zeige ich dir, wie du <a href=\"\/de\/algorithmen\/deque-implementieren-array\/\">mit einem Array ein Deque selbst implementieren<\/a> kannst.<\/p>\n\n\n\n<p>Wenn du noch Fragen hast, stelle sie gerne \u00fcber die Kommentar-Funktion. M\u00f6chtest du \u00fcber neue Tutorials und Artikel informiert werden? Dann <a href=\"#\" data-formkit-toggle=\"d8ee997126\">klicke hier<\/a>, um dich f\u00fcr den HappyCoders.eu-Newsletter anzumelden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Welche Deque-Implementierungen gibt es im JDK? Wie unterscheiden sie sich? In welchen F\u00e4llen sollte man welche Implementierung einsetzen?<\/p>\n","protected":false},"author":1,"featured_media":30796,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"none","_seopress_titles_title":"","_seopress_titles_desc":"Welche Deque-Implementierungen gibt es im JDK? Wie unterscheiden sie sich? In welchen F\u00e4llen sollte man welche Implementierung einsetzen?","_seopress_robots_index":"","_uag_custom_page_level_css":"","_wp_convertkit_post_meta":{"form":"-1","landing_page":"","tag":"0","restrict_content":"0"},"_metis_text_type":"standard","_metis_text_length":2587,"_post_count":0,"footnotes":""},"categories":[127],"tags":[195],"class_list":["post-30786","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-algorithmen","tag-datenstrukturen-deque"],"uagb_featured_image_src":{"full":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/path-4610699-1770x986-1.jpg",1770,986,false],"thumbnail":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/path-4610699-1770x986-1.jpg",150,84,false],"medium":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/path-4610699-1770x986-1.jpg",300,167,false],"medium_large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/path-4610699-1770x986-1.jpg",768,428,false],"large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/path-4610699-1770x986-1.jpg",1024,570,false],"feature_thumb_224":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/path-4610699-1770x986-1-224x125.jpg",224,125,true],"feature_thumb_336":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/path-4610699-1770x986-1-336x187.jpg",336,187,true],"feature_thumb_504":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/path-4610699-1770x986-1-504x281.jpg",504,281,true],"feature_thumb_672":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/path-4610699-1770x986-1-672x374.jpg",672,374,true],"half_400":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/path-4610699-1770x986-1-400x223.jpg",400,223,true],"half_600":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/path-4610699-1770x986-1-600x334.jpg",600,334,true],"full_800":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/path-4610699-1770x986-1-800x446.jpg",800,446,true],"full_944":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/path-4610699-1770x986-1-944x526.jpg",944,526,true],"full_1200":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/path-4610699-1770x986-1-1200x668.jpg",1200,668,true],"wide_1180":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/path-4610699-1770x986-1-1180x490.jpg",1180,490,true],"wide_1770":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/path-4610699-1770x986-1-1770x735.jpg",1770,735,true],"1536x1536":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/path-4610699-1770x986-1.jpg",1536,856,false],"2048x2048":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/path-4610699-1770x986-1.jpg",1770,986,false]},"uagb_author_info":{"display_name":"Sven Woltmann","author_link":"https:\/\/www.happycoders.eu\/de\/author\/sven\/"},"uagb_comment_info":0,"uagb_excerpt":"Welche Deque-Implementierungen gibt es im JDK? Wie unterscheiden sie sich? In welchen F\u00e4llen sollte man welche Implementierung einsetzen?","public_identification_id":"1311f6b86a3847c483368b8c7e3ad5cd","private_identification_id":"bf44ed6ddc444d16a1ba5284ca25f06a","_links":{"self":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/30786","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/comments?post=30786"}],"version-history":[{"count":10,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/30786\/revisions"}],"predecessor-version":[{"id":42163,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/30786\/revisions\/42163"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media\/30796"}],"wp:attachment":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media?parent=30786"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/categories?post=30786"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/tags?post=30786"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}