{"id":28730,"date":"2022-04-20T17:00:06","date_gmt":"2022-04-20T15:00:06","guid":{"rendered":"https:\/\/www.happycoders.eu\/?p=28730"},"modified":"2024-11-27T15:11:53","modified_gmt":"2024-11-27T14:11:53","slug":"queue-datenstruktur","status":"publish","type":"post","link":"https:\/\/www.happycoders.eu\/de\/algorithmen\/queue-datenstruktur\/","title":{"rendered":"Queue Datenstruktur"},"content":{"rendered":"\n<p>In diesem Tutorial lernst du alles \u00fcber den abstrakten Datentyp \"Queue\" (im deutschen auch als \"Warteschlange\" bezeichnet):<\/p>\n\n\n\n<ul class=\"hc-checked-list wp-block-list\"><li>Wie funktioniert eine Queue?<\/li><li>Was sind die Anwendungsgebiete f\u00fcr Queues?<\/li><li>Welche Queue-Interfaces und -Klassen gibt es im JDK?<\/li><li>Was sind blocking, non-blocking, bounded und unbounded Queues?<\/li><li>Wie implementiert man eine Queue in Java?<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"was-ist-eine-queue\">Was ist eine Queue?<\/h2>\n\n\n\n<p>Eine Queue 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\n<p>Man kann sich das wie eine Warteschlange an einer Kasse oder bei einer Beh\u00f6rde vorstellen:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-half_600\"><img decoding=\"async\" width=\"600\" height=\"143\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-of-people.v2-600x143.png\" alt=\"Warteschlange\" class=\"wp-image-30357\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-of-people.v2-600x143.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-of-people.v2-224x53.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-of-people.v2-336x80.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-of-people.v2-504x120.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-of-people.v2-672x160.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-of-people.v2-400x95.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-of-people.v2-800x191.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-of-people.v2-944x225.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-of-people.v2.png 1200w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><figcaption>Warteschlange<\/figcaption><\/figure><\/div>\n\n\n\n<p>Ankommende Personen stellen sich am Ende der Schlange (rechts im Bild) an. Sobald ein Kunde abgefertigt wurde, kommt der n\u00e4chste Kunde vom Kopf der Schlange (links) an die Reihe.<\/p>\n\n\n\n<p>Die Person, die sich <em>zuerst<\/em> angestellt hat, kommt somit auch <em>zuerst<\/em> an die Reihe. Daher sprechen wir vom First-in-First-out-Prinzip (FIFO).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"fifo-prinzip-bei-queues\">FIFO-Prinzip bei Queues<\/h2>\n\n\n\n<p>Beim abstrakten Datentyp \"Queue\" kann das wie im folgenden Beispiel aussehen:<\/p>\n\n\n\n<div class=\"wp-block-image\"><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.v2-600x174.png\" alt=\"Queue-Datenstruktur\" class=\"wp-image-30360\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v2-600x174.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v2-224x65.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v2-336x97.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v2-504x146.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v2-672x195.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v2-400x116.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v2-800x232.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v2-944x274.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/queue-data-structure.v2.png 1200w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><figcaption>Queue-Datenstruktur<\/figcaption><\/figure><\/div>\n\n\n\n<p>Die Grafik zeigt eine Queue, die die Elemente 6, 7, 8, usw. bis 13 enh\u00e4lt. Die 5 wurde gerade vom Kopf der Queue (englisch \"Front\" oder \"Head\", links im Bild) entnommen und die 14 wird gerade an das Ende der Queue (\"Back\", \"Tail\" oder \"Rear\" im englischen, rechts im Bild) eingef\u00fcgt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"queue-operationen-enqueue-und-dequeue\">Queue Operationen: Enqueue und Dequeue<\/h2>\n\n\n\n<p>Die Operationen der Queue bezeichnen wir wie folgt:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\"Enqueue\": Einf\u00fcgen neuer Elemente am Ende der Queue <\/li><li>\"Dequeue\": Entnehmen von Elementen vom Kopf der Queue<\/li><li>\"Peek\" oder \"Front\": Betrachten des Elements am Kopf, ohne es zu entnehmen (optional)<\/li><\/ul>\n\n\n\n<p>(Die entsprechenden Methoden der Java-Queue-Implementierungen hei\u00dfen \u00fcbrigens anders; mehr dazu im n\u00e4chsten Teil des Tutorials, \"<a href=\"\/de\/algorithmen\/java-queue\/\">Java Queue-Interface<\/a>\".)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"anwendungsgebiete-fuer-queues\">Anwendungsgebiete f\u00fcr Queues<\/h2>\n\n\n\n<p>Ein Anwendungsbereich von Queues, den wir alle kennen, ist die Druckerwarteschlange. Verschiedene Programme stellen dort Druckauftr\u00e4ge ein. In der Regel gibt es nur einen Drucker, der diese dann der Reihe nach abarbeitet.<\/p>\n\n\n\n<p>Ein technisches Anwendungsbeispiel ist die Verarbeitung von HTTP-Requests in einem Webserver. Ein Webserver arbeitet in der Regel mit einem Threadpool f\u00fcr gleichzeitig abzuarbeitende Requests. Wenn mehr Anfragen hereinkommen als gleichzeitig abgearbeitet werden k\u00f6nnen, ist der Threadpool ausgelastet. Zus\u00e4tzliche Requests werden dann in eine Warteschlange gestellt und in First-in-First-out-Reihenfolge abgearbeitet, sobald wieder Threads zur Verf\u00fcgung stehen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"zeitkomplexitaet-der-queue-operationen\">Zeitkomplexit\u00e4t der Queue-Operationen<\/h2>\n\n\n\n<p><em>Eine Einf\u00fchrung in das Thema Zeitkomplexit\u00e4t findest du im Artikel \"<a href=\"https:\/\/www.happycoders.eu\/de\/algorithmen\/o-notation-zeitkomplexitaet\/\">O-Notation und Zeitkomplexit\u00e4t \u2013 anschaulich erkl\u00e4rt<\/a>\".<\/em><\/p>\n\n\n\n<p>Queues werden in der Regel <a href=\"\/de\/algorithmen\/queue-implementieren-array\/\">mit Arrays<\/a> oder <a href=\"\/de\/algorithmen\/queue-implementieren-linked-list\/\">verketteten Listen<\/a> implementiert. Bei beiden Varianten ist der Aufwand f\u00fcr die Enqueue- und Dequeue-Operationen jeweils konstant, d. h. der Aufwand \u00e4ndert sich nicht mit der L\u00e4nge der Queue.<\/p>\n\n\n\n<p>Die Zeitkomplexit\u00e4t dieser Operationen lautet also: <em>O(1)<\/em>.<\/p>\n\n\n\n<p>Zu \u00dcbungszwecken kann man eine <a href=\"\/de\/algorithmen\/queue-implementieren-stack\/\">Queue auch mit Stacks implementieren<\/a> (dazu mehr in einem sp\u00e4teren Teil des Tutorials). Die Zeitkomplexit\u00e4t ist dann allerdings h\u00f6her.<\/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>In diesem Tutorial lernst du alles \u00fcber den abstrakten Datentyp \"Queue\", welche Queues es in Java gibt und wie man selber Queues implementiert.<\/p>\n","protected":false},"author":1,"featured_media":29402,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"none","_seopress_titles_title":"","_seopress_titles_desc":"In diesem Tutorial lernst du alles \u00fcber den abstrakten Datentyp \"Queue\", Enqueue- und Dequeue-Operationen, anhand anschaulicher Java-Beispiele.","_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":3381,"_post_count":0,"footnotes":""},"categories":[127],"tags":[192],"class_list":["post-28730","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-algorithmen","tag-datenstrukturen-queue"],"uagb_featured_image_src":{"full":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/duck-3217049-1770x986b.jpg",1770,986,false],"thumbnail":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/duck-3217049-1770x986b.jpg",150,84,false],"medium":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/duck-3217049-1770x986b.jpg",300,167,false],"medium_large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/duck-3217049-1770x986b.jpg",768,428,false],"large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/duck-3217049-1770x986b.jpg",1024,570,false],"feature_thumb_224":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/duck-3217049-1770x986b-224x125.jpg",224,125,true],"feature_thumb_336":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/duck-3217049-1770x986b-336x187.jpg",336,187,true],"feature_thumb_504":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/duck-3217049-1770x986b-504x281.jpg",504,281,true],"feature_thumb_672":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/duck-3217049-1770x986b-672x374.jpg",672,374,true],"half_400":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/duck-3217049-1770x986b-400x223.jpg",400,223,true],"half_600":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/duck-3217049-1770x986b-600x334.jpg",600,334,true],"full_800":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/duck-3217049-1770x986b-800x446.jpg",800,446,true],"full_944":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/duck-3217049-1770x986b-944x526.jpg",944,526,true],"full_1200":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/duck-3217049-1770x986b-1200x668.jpg",1200,668,true],"wide_1180":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/duck-3217049-1770x986b-1180x490.jpg",1180,490,true],"wide_1770":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/duck-3217049-1770x986b-1770x735.jpg",1770,735,true],"1536x1536":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/duck-3217049-1770x986b.jpg",1536,856,false],"2048x2048":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/duck-3217049-1770x986b.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":"In diesem Tutorial lernst du alles \u00fcber den abstrakten Datentyp \"Queue\", welche Queues es in Java gibt und wie man selber Queues implementiert.","public_identification_id":"54a1c694e19d4116a93cc346a2a66406","private_identification_id":"beae8a0246a04090a6be46b23f82025f","_links":{"self":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/28730","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=28730"}],"version-history":[{"count":10,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/28730\/revisions"}],"predecessor-version":[{"id":30362,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/28730\/revisions\/30362"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media\/29402"}],"wp:attachment":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media?parent=28730"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/categories?post=28730"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/tags?post=28730"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}