{"id":30856,"date":"2022-06-07T22:11:57","date_gmt":"2022-06-07T20:11:57","guid":{"rendered":"https:\/\/www.happycoders.eu\/?p=30856"},"modified":"2024-11-27T15:10:21","modified_gmt":"2024-11-27T14:10:21","slug":"java-queue-vs-deque","status":"publish","type":"post","link":"https:\/\/www.happycoders.eu\/de\/algorithmen\/java-queue-vs-deque\/","title":{"rendered":"Java Queue vs. Deque"},"content":{"rendered":"\n<p>In diesem Artikel erf\u00e4hrst du:<\/p>\n\n\n\n<ul class=\"hc-checked-list wp-block-list\"><li>Was sind die Unterschiede zwischen den Datenstrukturen Deque und Queue?<\/li><li>Wie unterscheiden sich die Java-Interfaces Queue und Deque?<\/li><\/ul>\n\n\n\n<p>Beginnen wir mit den Datenstrukturen...<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"unterschied-zwischen-queue-und-deque\">Unterschied zwischen Queue und Deque<\/h2>\n\n\n\n<p>Eine Queue ist eine Datenstruktur, die nach dem FIFO-Prinzip arbeitet: Elemente, die als erstes in die Queue gelegt werden, werden auch als erstes wieder entnommen. Elemente werden am Ende der Queue eingef\u00fcgt und am Anfang (auch \"Kopf\" genannt) wieder entnommen:<\/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=\"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>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>Deque (ausgesprochen \"Deck\") steht f\u00fcr \"<em>D<\/em>ouble-<em>e<\/em>nded <em>Que<\/em>ue\", also eine Queue mit zwei Seiten. Beim Deque k\u00f6nnen Elemente auf beiden Seiten eingef\u00fcgt und wieder entnommen werden:<\/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=\"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>Ein Deque ist eine Erweiterung der Queue und kann auch als solche benutzt werden. Es ist aber nicht auf FIFO-Funktionalit\u00e4t beschr\u00e4nkt. Es kann auch als LIFO-Datenstruktur \u2013 also als Stack \u2013 verwendet werden, indem man Elemente auf nur einer Seite einf\u00fcgt und wieder entnimmt.<\/p>\n\n\n\n<p>Details findest du im <a href=\"\/de\/algorithmen\/deque-datenstruktur\/\">Hauptartikel \u00fcber die Deque-Datenstruktur<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"unterschied-zwischen-java-deque-und-queue\">Unterschied zwischen Java Deque und Queue<\/h2>\n\n\n\n<p>Dieser Abschnitt beschreibt die Unterschiede zwischen den Java-Interfaces <code>java.util.Queue<\/code> und <code>java.util.Deque<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"deque-erweitert-queue\">Deque erweitert Queue<\/h3>\n\n\n\n<p><code>Deque<\/code> (\u2192 <a href=\"https:\/\/www.happycoders.eu\/de\/algorithmen\/java-deque\/\">alle Details \u00fcber das Deque-Interface<\/a>) wurde in Java 6 als Erweiterung der in Java 5 eingef\u00fchrten <code>Queue<\/code> (\u2192 <a href=\"https:\/\/www.happycoders.eu\/de\/algorithmen\/java-queue\/\">alle Details \u00fcber das Queue-Interface<\/a>) bereitgestellt.<\/p>\n\n\n\n<p><code>Deque<\/code> erweitert <code>Queue<\/code> um Deque-spezifische Methoden zum Einf\u00fcgen und Entnehmen von Elementen von spezifischen Seiten des Deques. Eine \u00dcbersicht \u00fcber diese Methoden findest du im oben verlinkten Artikel zum Deque-Interface.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"implementierungen-und-performance\">Implementierungen und Performance<\/h3>\n\n\n\n<p>Beide Interfaces bieten zahlreiche Implementierungen mit unterschiedlichen Eigenschaften. Welche du einsetzen solltest, erf\u00e4hrst du hier:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"\/de\/algorithmen\/java-queue-implementierungen\/\">Welche Queue-Implementierung sollte man einsetzen?<\/a><\/li><li><a href=\"\/de\/algorithmen\/java-deque-implementierungen\/\">Welche Deque-Implementierung sollte man einsetzen?<\/a><\/li><\/ul>\n\n\n\n<p>Da <code>Deque<\/code> von <code>Queue<\/code> erbt, kann jede <code>Deque<\/code>-Implementierung auch als Queue eingesetzt werden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"iteration\">Iteration<\/h3>\n\n\n\n<p><code>Queue<\/code>, und damit auch <code>Deque<\/code>, erweitern <code>Collection<\/code> und implementieren damit das <code>Iterable<\/code>-Interface. Wir k\u00f6nnen also innerhalb einer for-Schleife \u00fcber beide Datenstrukturen iterieren:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\">Queue&lt;String&gt; queue = <span class=\"hljs-keyword\">new<\/span> ConcurrentLinkedQueue&lt;&gt;();\nqueue.offer(<span class=\"hljs-string\">\"A\"<\/span>);\nqueue.offer(<span class=\"hljs-string\">\"B\"<\/span>);\nqueue.offer(<span class=\"hljs-string\">\"C\"<\/span>);\n\nSystem.out.println(<span class=\"hljs-string\">\"Queue: \"<\/span>);\n<span class=\"hljs-keyword\">for<\/span> (String s : queue) {\n  System.out.println(s);\n}\n\nDeque&lt;String&gt; deque = <span class=\"hljs-keyword\">new<\/span> ArrayDeque();\ndeque.offerLast(<span class=\"hljs-string\">\"A\"<\/span>);\ndeque.offerLast(<span class=\"hljs-string\">\"B\"<\/span>);\ndeque.offerLast(<span class=\"hljs-string\">\"C\"<\/span>);\n\nSystem.out.println(<span class=\"hljs-string\">\"\\nDeque: \"<\/span>);\n<span class=\"hljs-keyword\">for<\/span> (String s : deque) {\n  System.out.println(s);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Beide Datenstrukturen durchl\u00e4uft der Iterator vom Anfang (Kopf) zum Ende, wie die Ausgabe des kleinen Beispiels zeigt:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"Klartext\" data-shcb-language-slug=\"plaintext\"><span><code class=\"hljs language-plaintext\">Queue: \nA\nB\nC\n\nDeque: \nA\nB\nC\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Klartext<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">plaintext<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><code>Deque<\/code> hat zus\u00e4tzlich eine <code>descendingIterator()<\/code>-Methode, mit der die Elemente in entgegengesetzter Richtung \u2013 also vom Ende zum Anfang \u2013 durchlaufen werden k\u00f6nnen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">for<\/span> (Iterator&lt;String&gt; iterator = deque.descendingIterator(); iterator.hasNext(); ) {\n  String s = iterator.next();\n  System.out.println(s);\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"zusammenfassung\">Zusammenfassung<\/h2>\n\n\n\n<p>In diesem Artikel hast du die Unterschiede zwischen den Datenstrukturen Deque und Queue und den entsprechenden Java-Interfaces kennengelernt.<\/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>Was sind die Unterschiede zwischen den Datenstrukturen Deque und Queue? Und wie unterscheiden sich die entsprechenden Java-Interfaces?<\/p>\n","protected":false},"author":1,"featured_media":30863,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"none","_seopress_titles_title":"","_seopress_titles_desc":"Was sind die Unterschiede zwischen den Datenstrukturen Deque und Queue? Und wie unterscheiden sich die entsprechenden Java-Interfaces?","_seopress_robots_index":"","_uag_custom_page_level_css":"","_metis_text_type":"standard","_metis_text_length":3608,"_post_count":0,"footnotes":""},"categories":[127],"tags":[195],"class_list":["post-30856","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\/bootleg-7074375-1770x986-1.jpg",1770,986,false],"thumbnail":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/bootleg-7074375-1770x986-1.jpg",150,84,false],"medium":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/bootleg-7074375-1770x986-1.jpg",300,167,false],"medium_large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/bootleg-7074375-1770x986-1.jpg",768,428,false],"large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/bootleg-7074375-1770x986-1.jpg",1024,570,false],"feature_thumb_224":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/bootleg-7074375-1770x986-1-224x125.jpg",224,125,true],"feature_thumb_336":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/bootleg-7074375-1770x986-1-336x187.jpg",336,187,true],"feature_thumb_504":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/bootleg-7074375-1770x986-1-504x281.jpg",504,281,true],"feature_thumb_672":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/bootleg-7074375-1770x986-1-672x374.jpg",672,374,true],"half_400":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/bootleg-7074375-1770x986-1-400x223.jpg",400,223,true],"half_600":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/bootleg-7074375-1770x986-1-600x334.jpg",600,334,true],"full_800":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/bootleg-7074375-1770x986-1-800x446.jpg",800,446,true],"full_944":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/bootleg-7074375-1770x986-1-944x526.jpg",944,526,true],"full_1200":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/bootleg-7074375-1770x986-1-1200x668.jpg",1200,668,true],"wide_1180":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/bootleg-7074375-1770x986-1-1180x490.jpg",1180,490,true],"wide_1770":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/bootleg-7074375-1770x986-1-1770x735.jpg",1770,735,true],"1536x1536":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/bootleg-7074375-1770x986-1.jpg",1536,856,false],"2048x2048":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/bootleg-7074375-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":"Was sind die Unterschiede zwischen den Datenstrukturen Deque und Queue? Und wie unterscheiden sich die entsprechenden Java-Interfaces?","public_identification_id":"09338dd47a1a49859b4276f839a92a54","private_identification_id":"623be4cc834641feb9e4e7f5837a11bf","_links":{"self":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/30856","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=30856"}],"version-history":[{"count":10,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/30856\/revisions"}],"predecessor-version":[{"id":31190,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/30856\/revisions\/31190"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media\/30863"}],"wp:attachment":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media?parent=30856"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/categories?post=30856"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/tags?post=30856"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}