{"id":10801,"date":"2020-04-08T09:00:44","date_gmt":"2020-04-08T07:00:44","guid":{"rendered":"https:\/\/www.happycoders.eu\/?p=10801"},"modified":"2024-11-27T15:13:17","modified_gmt":"2024-11-27T14:13:17","slug":"stack-queue-deque-java","status":"publish","type":"post","link":"https:\/\/www.happycoders.eu\/de\/algorithmen\/stack-queue-deque-java\/","title":{"rendered":"Stack, Queue, Deque in Java"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Fr\u00fcher oder sp\u00e4ter m\u00fcssen sich Java-Entwickler mit den Datenstrukturen Queue, Deque und Stack auseinandersetzen. In den <a href=\"\/de\/algorithmen\/stack-datenstruktur\/\">Stack-<\/a>, <a href=\"\/de\/algorithmen\/queue-datenstruktur\/\">Queue-<\/a> und <a href=\"\/de\/algorithmen\/deque-datenstruktur\/\">Deque-Tutorials<\/a> findest du Antworten auf die folgenden Fragen:<\/p>\n\n\n\n<ul class=\"hc-checked-list wp-block-list\"><li>Wie funktionieren die Datenstrukturen Stack, Queue und Deque?<\/li><li>Wie unterscheiden sie sich?<\/li><li>Wie unterscheiden sich die Java-Interfaces bzw. Klassen&nbsp;<code>Stack<\/code>, <code>Queue<\/code> und <code>Deque<\/code>?<\/li><li>Welche Queue-, Deque- und Stack-Implementierungen gibt es im JDK?<\/li><li>Und w<span style=\"color: initial;\">elche der zahlreichen Implementierungen sind f\u00fcr welche Einsatzzwecke geeignet?<\/span><\/li><li>Wie kann man Queues, Deques und Stacks selbst implementieren?<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Alle Code-Beispiele findest du im <a href=\"https:\/\/github.com\/SvenWoltmann\/java-collections-guide\" target=\"_blank\" rel=\"noreferrer noopener\">\"Java Collections Guide\" GitHub-Repository<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"datenstrukturen-was-sind-queues-deques-und-stacks\">Datenstrukturen: Was sind Stacks, Queues und Deques?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ein Stack (auf deutsch: \"Stapelspeicher\", \"Kellerspeicher\" oder kurz \"Stapel\", \"Keller\") ist eine Liste von Elementen, bei der die Elemente auf derselben Seite (in Darstellungen klassischerweise oben) eingef\u00fcgt (\"gestapelt\") und wieder entnommen werden:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-half_600\"><img decoding=\"async\" width=\"600\" height=\"281\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/stack-data-structure.v2-600x281.png\" alt=\"Stack vs. Queue vs. Deque: Stack-Datenstruktur\" class=\"wp-image-30977\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/stack-data-structure.v2-600x281.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/stack-data-structure.v2-224x105.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/stack-data-structure.v2-336x157.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/stack-data-structure.v2-504x236.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/stack-data-structure.v2-672x315.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/stack-data-structure.v2-400x187.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/stack-data-structure.v2-800x375.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/stack-data-structure.v2-944x442.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/stack-data-structure.v2.png 1200w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><figcaption>Stack-Datenstruktur<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Weitere Details findest du im <a href=\"\/de\/algorithmen\/stack-datenstruktur\/\">Hauptartikel \u00fcber die Stack-Datenstruktur<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eine Queue (auf deutsch: \"Warteschlange\") ist eine Liste von Elementen, bei der die Elemente auf einer Seite eingef\u00fcgt und in derselben Reihenfolge auf der anderen Seite wieder entnommen werden:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-half_600\"><img decoding=\"async\" width=\"600\" height=\"174\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v4-600x174.png\" alt=\"Stack vs. Queue vs. Deque: Queue-Datenstruktur\" class=\"wp-image-30989\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v4-600x174.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v4-224x65.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v4-336x97.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v4-504x146.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v4-672x195.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v4-400x116.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v4-800x232.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v4-944x274.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v4.png 1200w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><figcaption>Queue-Datenstruktur<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Alles \u00fcber Queues erf\u00e4hrst du im <a href=\"\/de\/algorithmen\/queue-datenstruktur\/\">Hauptartikel \u00fcber die Queue-Datenstruktur<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ein Deque (<em><strong>D<\/strong>ouble-<strong>e<\/strong>nded <strong>que<\/strong>ue<\/em>, ausgesprochen \"Deck\" \u2013 eine deutsche \u00dcbersetzung gibt es nicht) ist eine Liste von Elementen, bei der die Elemente sowohl auf der einen als auch auf der anderen Seite eingef\u00fcgt und entnommen werden k\u00f6nnen:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full_800\"><img decoding=\"async\" width=\"800\" height=\"135\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/deque-data-structure.v4-800x135.png\" alt=\"Stack vs. Queue vs. Deque: Deque-Datenstruktur\" class=\"wp-image-30976\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/deque-data-structure.v4-800x135.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/deque-data-structure.v4-224x38.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/deque-data-structure.v4-336x57.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/deque-data-structure.v4-504x85.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/deque-data-structure.v4-672x113.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/deque-data-structure.v4-400x68.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/deque-data-structure.v4-600x101.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/deque-data-structure.v4-944x159.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/deque-data-structure.v4-1200x203.png 1200w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/deque-data-structure.v4.png 1600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><figcaption>Deque-Datenstruktur<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Details findest du im&nbsp;<a href=\"\/de\/algorithmen\/deque-datenstruktur\/\">Hauptartikel \u00fcber die Deque-Datenstruktur<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"queues-in-java\">Wie unterscheiden sich Stack, Queue und Deque?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Die Unterschiede zwischen den jeweiligen Datenstrukturen sind in folgenden Artikeln erkl\u00e4rt:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"\/de\/algorithmen\/java-deque-vs-stack\/\">Unterschiede zwischen Deque und Stack<\/a><\/li><li><a href=\"\/de\/algorithmen\/java-queue-vs-deque\/\">Unterschiede zwischen Queue und Deque<\/a><\/li><li><a href=\"\/de\/algorithmen\/stack-vs-queue\/\">Unterschiede zwischen Stack und Queue<\/a><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"zusammenfassung\">Welche Java-Implementierungen gibt es, und welche sollte man einsetzen?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Die Einsatzempfehlungen basieren auf den Charakteristika der JDK-Queue- und Deque-Implementierungen, die in den verlinkten Artikeln n\u00e4her beschrieben sind.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Folgendes sind meine Empfehlungen f\u00fcr allgemeine Einsatzzwecke:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Verwende <a href=\"\/de\/algorithmen\/arraydeque-java\/\">ArrayDeque<\/a> f\u00fcr <strong>single-threaded<\/strong> Anwendungen.<\/li><li><a href=\"\/de\/algorithmen\/concurrentlinkedqueue-java\/\">ConcurrentLinkedQueue<\/a> und <a href=\"\/de\/algorithmen\/concurrentlinkeddeque-java\/\">ConcurrentLinkedDeque<\/a> als <strong>threadsichere, nicht blockierende<\/strong> und unbounded Queues\/Deques.<\/li><li><a href=\"\/de\/algorithmen\/arrayblockingqueue-java\/\">ArrayBlockingQueue<\/a> als <strong>threadsichere, blockierende<\/strong>, bounded Queue, sofern du <strong>wenig Contention<\/strong> zwischen Producer- und Consumer-Threads erwartest.<\/li><li><a href=\"\/de\/algorithmen\/linkedblockingqueue-java\/\">LinkedBlockingQueue<\/a> als <strong>threadsichere, blockierende<\/strong>, bounded Queues, wenn du eher <strong>hohe Contention<\/strong> zwischen Producer- und Consumer-Threads erwartest (am besten testen, welche Implementierung f\u00fcr deinen Use Case performanter ist).<\/li><li><a href=\"\/de\/algorithmen\/linkedblockingdeque-java\/\">LinkedBlockingDeque<\/a> als <strong>threadsicheres, blockierendes<\/strong>, bounded Deque.<\/li><li>... oder die <a rel=\"noopener\" href=\"https:\/\/github.com\/JCTools\/JCTools\" target=\"_blank\">optimierten Queues von JCTools<\/a>.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Die folgenden Queues sind f\u00fcr spezielle Einsatzwecke vorgesehen:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/www.happycoders.eu\/de\/algorithmen\/priorityqueue-java\/\">PriorityQueue<\/a> und <a href=\"https:\/\/www.happycoders.eu\/de\/algorithmen\/priorityblockingqueue-java\/\">PriorityBlockingQueue<\/a>, um die Elemente <strong>sortiert nach Priorit\u00e4t<\/strong> zu entnehmen.<\/li><li><a href=\"\/de\/algorithmen\/delayqueue-java\/\">DelayQueue<\/a>, um Elemente nach einer vorgegebenen <strong>Wartezeit<\/strong> zu entnehmen.<\/li><li><a href=\"\/de\/algorithmen\/synchronousqueue-java\/\">SynchronousQueue<\/a>, um Elemente <strong>synchron<\/strong> von einem Producer an einen Consumer zu \u00fcbergeben.<\/li><li><a href=\"\/de\/algorithmen\/linkedtransferqueue-java\/\">LinkedTransferQueue<\/a>, um einen <strong>Producer-Threads<\/strong> solange <strong>zu blockieren<\/strong>, bis das Element an einen Consumer-Thread transferiert wurde.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">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>Wie funktionieren die Datenstrukturen Stack, Queue und Deque? Welche Implementierungen gibt es im JDK? Welche sollte man wann verwenden?<\/p>\n","protected":false},"author":1,"featured_media":31220,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_titles_title":"","_seopress_titles_desc":"Wie funktionieren die Datenstrukturen Stack, Queue und Deque? Welche Implementierungen gibt es im JDK? Welche sollte man wann verwenden?","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"none","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"both","_seopress_redirections_param":"","_seopress_redirections_type":301,"_seopress_analysis_target_kw":"stack queue deque,stack queue und deque","_seopress_news_disabled":"","_seopress_video_disabled":"","_seopress_video":[{"url":"","title":"","desc":"","thumbnail":"","duration":"","rating":"","view_count":"","tag":"","cat":""}],"_seopress_pro_schemas_manual":[{"_seopress_pro_rich_snippets_type":"none"}],"_seopress_pro_rich_snippets_disable_all":"","_seopress_pro_rich_snippets_disable":[],"_seopress_pro_schemas":[],"_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":3577,"_post_count":0,"footnotes":""},"categories":[127],"tags":[164],"class_list":["post-10801","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-algorithmen","tag-java-datenstrukturen"],"uagb_featured_image_src":{"full":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2020\/04\/queue-deque-stack-4020617_1770x986.jpg",1770,986,false],"thumbnail":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2020\/04\/queue-deque-stack-4020617_1770x986.jpg",150,84,false],"medium":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2020\/04\/queue-deque-stack-4020617_1770x986.jpg",300,167,false],"medium_large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2020\/04\/queue-deque-stack-4020617_1770x986.jpg",768,428,false],"large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2020\/04\/queue-deque-stack-4020617_1770x986.jpg",1024,570,false],"feature_thumb_224":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2020\/04\/queue-deque-stack-4020617_1770x986-224x125.jpg",224,125,true],"feature_thumb_336":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2020\/04\/queue-deque-stack-4020617_1770x986-336x187.jpg",336,187,true],"feature_thumb_504":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2020\/04\/queue-deque-stack-4020617_1770x986-504x281.jpg",504,281,true],"feature_thumb_672":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2020\/04\/queue-deque-stack-4020617_1770x986-672x374.jpg",672,374,true],"half_400":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2020\/04\/queue-deque-stack-4020617_1770x986-400x223.jpg",400,223,true],"half_600":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2020\/04\/queue-deque-stack-4020617_1770x986-600x334.jpg",600,334,true],"full_800":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2020\/04\/queue-deque-stack-4020617_1770x986-800x446.jpg",800,446,true],"full_944":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2020\/04\/queue-deque-stack-4020617_1770x986-944x526.jpg",944,526,true],"full_1200":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2020\/04\/queue-deque-stack-4020617_1770x986-1200x668.jpg",1200,668,true],"wide_1180":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2020\/04\/queue-deque-stack-4020617_1770x986-1180x490.jpg",1180,490,true],"wide_1770":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2020\/04\/queue-deque-stack-4020617_1770x986-1770x735.jpg",1770,735,true],"1536x1536":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2020\/04\/queue-deque-stack-4020617_1770x986.jpg",1536,856,false],"2048x2048":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2020\/04\/queue-deque-stack-4020617_1770x986.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":"Wie funktionieren die Datenstrukturen Stack, Queue und Deque? Welche Implementierungen gibt es im JDK? Welche sollte man wann verwenden?","public_identification_id":"923b6e9cc4f04d15af62f2d1c33ca8d0","private_identification_id":"270fd95aa14b4a2c9e2010938650f1a6","_links":{"self":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/10801","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=10801"}],"version-history":[{"count":10,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/10801\/revisions"}],"predecessor-version":[{"id":31296,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/10801\/revisions\/31296"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media\/31220"}],"wp:attachment":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media?parent=10801"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/categories?post=10801"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/tags?post=10801"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}