{"id":28761,"date":"2022-04-20T17:01:32","date_gmt":"2022-04-20T15:01:32","guid":{"rendered":"https:\/\/www.happycoders.eu\/?p=28761"},"modified":"2024-11-27T15:12:14","modified_gmt":"2024-11-27T14:12:14","slug":"java-queue","status":"publish","type":"post","link":"https:\/\/www.happycoders.eu\/de\/algorithmen\/java-queue\/","title":{"rendered":"Queue-Interface in Java (mit Beispiel)"},"content":{"rendered":"\n<p>Das JDK enth\u00e4lt seit Java 5.0 das Interface <code>java.util.Queue<\/code> und mehrere Queue-Implementierungen, die sich in diversen Eigenschaften (wie bounded\/unbounded, blocking\/non-blocking, threadsicher\/nicht threadsicher) unterscheiden.<\/p>\n\n\n\n<p>Auf all diese Eigenschaften werde ich im weiteren Verlauf dieses Tutorials eingehen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"java-queue-klassenhierarchie\">Java Queue Klassenhierarchie<\/h2>\n\n\n\n<p>Bevor ich die Java-Queue im Detail vorstelle, m\u00f6chte ich einen \u00dcberblick in Form eines UML-Klassendiagramms geben:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full_800\"><img decoding=\"async\" width=\"800\" height=\"500\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/java-Queue-class-hierarchy-800x500.png\" alt=\"Java Queue Klassenhierarchie\" class=\"wp-image-28998\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/java-Queue-class-hierarchy-800x500.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/java-Queue-class-hierarchy-224x140.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/java-Queue-class-hierarchy-336x210.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/java-Queue-class-hierarchy-504x315.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/java-Queue-class-hierarchy-672x420.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/java-Queue-class-hierarchy-400x250.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/java-Queue-class-hierarchy-600x375.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/java-Queue-class-hierarchy-944x590.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/java-Queue-class-hierarchy-1200x750.png 1200w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/java-Queue-class-hierarchy.png 1600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><figcaption>Java Queue Klassenhierarchie<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Das <a href=\"\/de\/algorithmen\/java-blockingqueue\/\">BlockingQueue-Interface<\/a> werde ich im n\u00e4chsten Teil des Tutorials beschreiben.<\/p>\n\n\n\n<p>Die konkreten Queue-Klassen <a href=\"https:\/\/www.happycoders.eu\/de\/algorithmen\/linkedblockingqueue-java\/\">ConcurrentLinkedQueue<\/a>, <a href=\"\/de\/algorithmen\/priorityqueue-java\/\">PriorityQueue<\/a>, <a href=\"\/de\/algorithmen\/arrayblockingqueue-java\/\">ArrayBlockingQueue<\/a>, <a href=\"\/de\/algorithmen\/delayqueue-java\/\">DelayQueue<\/a>, <a href=\"\/de\/algorithmen\/linkedblockingqueue-java\/\">LinkedBlockingQueue<\/a>, <a href=\"\/de\/algorithmen\/priorityblockingqueue-java\/\">PriorityBlockingQueue<\/a> und <a href=\"\/de\/algorithmen\/synchronousqueue-java\/\">SynchronousQueue<\/a> folgen im Anschluss. Das <code>TransferQueue<\/code>-Interface erkl\u00e4re ich zusammen mit der <a href=\"\/de\/algorithmen\/linkedtransferqueue-java\/\">LinkedTransferQueue<\/a>. <\/p>\n\n\n\n<p>Du kannst zu den entsprechenden Teilen jederzeit \u00fcber die Tutorial-Navigation am rechten Rand springen.<\/p>\n\n\n\n<p>Die grau eingezeichneten Interfaces <code>Deque<\/code> und <code>BlockingDeque<\/code> mitsamt ihren Implementierungen werden in der <a href=\"\/de\/algorithmen\/deque-datenstruktur\/\">Tutorial-Serie \"Deques\"<\/a> behandelt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"java-queue-methoden\">Java Queue Methoden<\/h2>\n\n\n\n<p>Das Queue-Interface definiert sechs Methoden zum Einf\u00fcgen, Entnehmen und Betrachten von Elementen. F\u00fcr jede der drei Queue-Operationen \"Enqueue\", \"Dequeue\" und \"Peek\" definiert das Interface jeweils zwei Methoden: eine die im Fehlerfall eine Exception wirft und eine die einen speziellen Wert (<code>false<\/code> oder <code>null<\/code>) zur\u00fcckliefert.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"methoden-zum-einfuegen-in-die-queue\">Methoden zum Einf\u00fcgen in die Queue<\/h3>\n\n\n\n<p>Zun\u00e4chst ein grafischer \u00dcberblick \u00fcber die Enqueue-Methoden:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full_800\"><img decoding=\"async\" width=\"800\" height=\"68\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-add-offer-800x68.png\" alt=\"Methoden zum Einf\u00fcgen in eine Queue: add(), offer()\" class=\"wp-image-30370\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-add-offer-800x68.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-add-offer-224x19.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-add-offer-336x29.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-add-offer-504x43.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-add-offer-672x57.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-add-offer-400x34.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-add-offer-600x51.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-add-offer-944x80.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-add-offer-1200x102.png 1200w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-add-offer.png 1600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><figcaption>Methoden zum Einf\u00fcgen in eine Queue<\/figcaption><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\">Queue.add()<\/h4>\n\n\n\n<p>Diese Methode ist bereits im <code>Collection<\/code>-Interface definiert und f\u00fcgt ein Element in die Queue ein. Bei Erfolg gibt die Methode <code>true<\/code> zur\u00fcck. Wenn eine gr\u00f6\u00dfenbeschr\u00e4nkte Queue voll ist, wirft diese Methode eine <code>IllegalStateException<\/code>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Queue.offer()<\/h4>\n\n\n\n<p><code>offer()<\/code> f\u00fcgt wie <code>add()<\/code> ein Element in die Queue ein und gibt bei Erfolg <code>true<\/code> zur\u00fcck. Wenn eine gr\u00f6\u00dfenbeschr\u00e4nkte Queue voll ist, gibt diese Methode <code>false<\/code> zur\u00fcck anstatt eine <code>IllegalStateException<\/code> zu werfen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"methoden-zum-entnehmen-aus-der-queue\">Methoden zum Entnehmen aus der Queue<\/h3>\n\n\n\n<p>Auch f\u00fcr die Dequeue-Methoden zun\u00e4chst ein grafischer \u00dcberblick:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full_800\"><img decoding=\"async\" width=\"800\" height=\"82\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-remove-poll-800x82.png\" alt=\"Methoden zum Entfernen aus einer Queue: remove(), poll()\" class=\"wp-image-30371\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-remove-poll-800x82.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-remove-poll-224x23.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-remove-poll-336x34.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-remove-poll-504x52.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-remove-poll-672x69.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-remove-poll-400x41.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-remove-poll-600x62.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-remove-poll-944x97.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-remove-poll-1200x123.png 1200w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-remove-poll.png 1600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><figcaption>Methoden zum Entfernen aus einer Queue<\/figcaption><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\">Queue.remove()<\/h4>\n\n\n\n<p><code>remove()<\/code> entnimmt das Element vom Kopf der Queue. Ist die Queue leer, wirft die Methode eine <code>NoSuchElementException<\/code>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Queue.poll()<\/h4>\n\n\n\n<p>Auch <code>poll()<\/code> entnimmt das Element am Kopf der Queue. Anders als <code>remove()<\/code> wirft die Methode bei einer leeren Queue keine Exception, sondern gibt <code>null<\/code> zur\u00fcck.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"methoden-zum-betrachten-des-kopf-elements\">Methoden zum Betrachten des Kopf-Elements<\/h3>\n\n\n\n<p>Und wieder zun\u00e4chst ein \u00dcberblick \u00fcber Methoden:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full_800\"><img decoding=\"async\" width=\"800\" height=\"68\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-element-peek-800x68.png\" alt=\"Methoden zum Betrachten des Kopf-Elements einer Queue: element(), peek()\" class=\"wp-image-30372\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-element-peek-800x68.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-element-peek-224x19.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-element-peek-336x29.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-element-peek-504x43.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-element-peek-672x57.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-element-peek-400x34.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-element-peek-600x51.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-element-peek-944x80.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-element-peek-1200x102.png 1200w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-queue-element-peek.png 1600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><figcaption>Methoden zum Betrachten des Kopf-Elements einer Queue<\/figcaption><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\">Queue.element()<\/h4>\n\n\n\n<p>Die <code>element()<\/code>-Methode gibt das Element vom Kopf der Queue zur\u00fcck, ohne es aus der Queue zu entnehmen. Ist die Queue leer, wird eine <code>NoSuchElementException<\/code> geworfen.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Queue.peek()<\/h4>\n\n\n\n<p>Genau wie <code>element()<\/code> gibt auch <code>peek()<\/code> das Kopf-Element zur\u00fcck, ohne es aus der Queue zu entfernen. Bei einer leeren Queue gibt diese Methode allerdings \u2013 genau wie <code>poll()<\/code> \u2013 <code>null<\/code> zur\u00fcck.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"queue-methoden-zusammenfassung\">Queue-Methoden \u2013 Zusammenfassung<\/h3>\n\n\n\n<p>Die folgende Tabelle zeigt noch einmal die sechs Methoden gruppiert nach Operation und Art der Fehlerbehandlung:<\/p>\n\n\n\n<figure class=\"wp-block-table aligncenter is-style-stripes table-wide-cols\"><table><thead><tr><th><\/th><th>im Fehlerfall:<br>Exception<\/th><th>im Fehlerfall:<br>R\u00fcckgabewert<\/th><\/tr><\/thead><tbody><tr><td>Element anh\u00e4ngen (<em>enqueue<\/em>):<\/td><td><code>add(E e)<\/code><\/td><td><code>offer(E e)<\/code><\/td><\/tr><tr><td>Element entnehmen (de<em>queue<\/em>):<\/td><td><code>remove()<\/code><\/td><td><code>poll()<\/code><\/td><\/tr><tr><td>Element ansehen (<em>peek<\/em>):<\/td><td><code>element()<\/code><\/td><td><code>peek()<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"wie-erzeugt-man-eine-queue\">Wie erzeugt man eine Queue?<\/h2>\n\n\n\n<p><code>java.util.Queue<\/code> ist ein Interface. Ein Interface kann nicht instatiiert werden, da es lediglich beschreibt, welche Methoden eine Klasse anbietet, jedoch keine Implementierungen dieser Methoden beinhaltet.<\/p>\n\n\n\n<p>Was passiert, wenn man es dennoch versucht?<\/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\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">QueueTest<\/span> <\/span>{\n  <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">(String&#091;] args)<\/span> <\/span>{\n    Queue&lt;Integer&gt; queue = <span class=\"hljs-keyword\">new<\/span> Queue&lt;&gt;(); <span class=\"hljs-comment\">\/\/ &lt;-- Don't do this!<\/span>\n  }\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>Beim Versuch diesen Code zu compilieren w\u00fcrdest du folgende Fehlermeldung sehen:<\/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\">QueueTest.java:5: error: Queue is abstract; cannot be instantiated\n    Queue&lt;Integer&gt; queue = new Queue&lt;&gt;(); \/\/ &lt;-- Don't do this!\n                           ^\n1 error<\/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>Daher muss eine der konkreten Queue-Implementierungen ausgew\u00e4hlt werden, z. B. die <code>ConcurrentLinkedQueue<\/code>:<\/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\">Queue&lt;Integer&gt; queue = <span class=\"hljs-keyword\">new<\/span> ConcurrentLinkedQueue&lt;&gt;();<\/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>(Die verschiedenen Queue-Klassen werden in weiteren Teilen des Tutorials erl\u00e4utert. Im letzten Teil findest du eine Entscheidungshilfe, wann du welche Implementierung verwenden solltest.)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"beispiel-wie-benutzt-man-eine-queue\">Beispiel: Wie benutzt man eine Queue?<\/h2>\n\n\n\n<p>Das folgende Beispiel zeigt, wie man eine Queue erstellt, wie man diese mit einigen Werten bef\u00fcllt, und wie man die Werte wieder entnimmt. Du findest den Beispiel-Code auch auf <a href=\"https:\/\/github.com\/SvenWoltmann\/java-collections-guide\/blob\/main\/src\/main\/java\/eu\/happycoders\/demos\/queue\/JavaQueueDemo.java\" target=\"_blank\" rel=\"noopener\">GitHub<\/a>.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">JavaQueueDemo<\/span> <\/span>{\n  <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">(String&#091;] args)<\/span> <\/span>{\n    <span class=\"hljs-comment\">\/\/ 1.<\/span>\n    Queue&lt;Integer&gt; queue = <span class=\"hljs-keyword\">new<\/span> ConcurrentLinkedQueue&lt;&gt;();\n\n    <span class=\"hljs-comment\">\/\/ 2.<\/span>\n    <span class=\"hljs-keyword\">for<\/span> (<span class=\"hljs-keyword\">int<\/span> i = <span class=\"hljs-number\">1<\/span>; i &lt;= <span class=\"hljs-number\">5<\/span>; i++) {\n      queue.offer(i);\n      System.out.println(<span class=\"hljs-string\">\"queue.offer(\"<\/span> + i + <span class=\"hljs-string\">\") --&gt; queue = \"<\/span> + queue);\n    }\n\n    System.out.println();\n\n    <span class=\"hljs-comment\">\/\/ 3.<\/span>\n    System.out.println(<span class=\"hljs-string\">\"queue.peek() = \"<\/span> + queue.peek());\n\n    System.out.println();\n\n    <span class=\"hljs-comment\">\/\/ 4.<\/span>\n    <span class=\"hljs-keyword\">while<\/span> (!queue.isEmpty()) {\n      System.out.println(<span class=\"hljs-string\">\"queue.poll() = \"<\/span> + queue.poll() + <span class=\"hljs-string\">\" --&gt; queue = \"<\/span> + queue);\n    }\n\n    System.out.println();\n\n    <span class=\"hljs-comment\">\/\/ 5.<\/span>\n    System.out.println(<span class=\"hljs-string\">\"queue.poll() = \"<\/span> + queue.poll());\n    System.out.println(<span class=\"hljs-string\">\"queue.peek() = \"<\/span> + queue.peek());\n  }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><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>Das Programm tut folgendes (die Numerierung verweist auf die Kommentare im Quellcode):<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Es erstellt eine Queue. Welche du benutzt, ist f\u00fcr dieses Beispiel irrelevant, da es keine speziellen Queue-Eigenschaften erfordert. Wir verwenden die <code>ConcurrentLinkedQueue<\/code>.<\/li><li>Die Werte 1 bis 5 werden mit <code>Queue.offer()<\/code> in die Queue geschrieben. Der Inhalt der Queue wird nach jedem Einf\u00fcgen angezeigt.<\/li><li>Wir betrachten mit <code>Queue.peek()<\/code> das Kopf-Element der Queue.<\/li><li>Solange die Queue Elemente enth\u00e4lt (dies pr\u00fcfen wir mit der <code>isEmpty()<\/code>-Methode, die das <code>Queue<\/code>-Interface von <code>Collection<\/code> erbt), werden diese mit <code>Queue.poll()<\/code> entnommen und angezeigt. Danach wird jeweils wieder der gesamte Inhalt der Queue angezeigt.<\/li><li>Nachdem die Queue geleert wurde, werden noch einmal die R\u00fcckgabewerte von <code>poll()<\/code> und <code>peek()<\/code> angezeigt.<\/li><\/ol>\n\n\n\n<p>Das Programm gibt folgendes aus:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"Klartext\" data-shcb-language-slug=\"plaintext\"><span><code class=\"hljs language-plaintext\">queue.offer(1) --&gt; queue = &#091;1]\nqueue.offer(2) --&gt; queue = &#091;1, 2]\nqueue.offer(3) --&gt; queue = &#091;1, 2, 3]\nqueue.offer(4) --&gt; queue = &#091;1, 2, 3, 4]\nqueue.offer(5) --&gt; queue = &#091;1, 2, 3, 4, 5]\n\nqueue.peek() = 1\n\nqueue.poll() = 1 --&gt; queue = &#091;2, 3, 4, 5]\nqueue.poll() = 2 --&gt; queue = &#091;3, 4, 5]\nqueue.poll() = 3 --&gt; queue = &#091;4, 5]\nqueue.poll() = 4 --&gt; queue = &#091;5]\nqueue.poll() = 5 --&gt; queue = &#091;]\n\nqueue.poll() = null\nqueue.peek() = null<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><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>Es ist sehr gut zu sehen, wie die Elemente in derselben Reihenfolge entnommen werden, wie sie eingef\u00fcgt wurden (First-in-First-out \u2013 FIFO).<\/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 Teil des Tutorials hast du das <code>Queue<\/code>-Interface von Java kennengelernt. Anhand eines Beispiels hast du gesehen, wie man die Java-Queue benutzt.<\/p>\n\n\n\n<p>Im n\u00e4chsten Teil schauen wir uns das <a href=\"\/de\/algorithmen\/java-blockingqueue\/\">Interface \"BlockingQueue\"<\/a> genauer an. Dort werde ich auch den Unterschied zwischen bounded und unbounded bzw. blocking und non-blocking Queues erkl\u00e4ren.<\/p>\n\n\n\n<p>Danach werden wir alle Queue-Implementierungen des JDK einzeln betrachten. Anhand deren besonderer Eigenschaften werde ich dir erkl\u00e4ren, wann man welche Implementierung einsetzen sollte.<\/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>Wie erstellt und benutzt man eine Queue in Java? Welche Methoden bietet das Queue-Interface? Mit Beispiel-Code!<\/p>\n","protected":false},"author":1,"featured_media":29401,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"none","_seopress_titles_title":"","_seopress_titles_desc":"Wie erstellt und benutzt man eine Queue in Java? Welche Methoden bietet das Queue-Interface? Welche Queues gibt es? Mit Beispiel-Code!","_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":7613,"_post_count":0,"footnotes":""},"categories":[127],"tags":[192],"class_list":["post-28761","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\/queue-655819-1770x986b.jpg",1770,986,false],"thumbnail":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/queue-655819-1770x986b.jpg",150,84,false],"medium":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/queue-655819-1770x986b.jpg",300,167,false],"medium_large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/queue-655819-1770x986b.jpg",768,428,false],"large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/queue-655819-1770x986b.jpg",1024,570,false],"feature_thumb_224":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/queue-655819-1770x986b-224x125.jpg",224,125,true],"feature_thumb_336":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/queue-655819-1770x986b-336x187.jpg",336,187,true],"feature_thumb_504":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/queue-655819-1770x986b-504x281.jpg",504,281,true],"feature_thumb_672":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/queue-655819-1770x986b-672x374.jpg",672,374,true],"half_400":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/queue-655819-1770x986b-400x223.jpg",400,223,true],"half_600":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/queue-655819-1770x986b-600x334.jpg",600,334,true],"full_800":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/queue-655819-1770x986b-800x446.jpg",800,446,true],"full_944":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/queue-655819-1770x986b-944x526.jpg",944,526,true],"full_1200":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/queue-655819-1770x986b-1200x668.jpg",1200,668,true],"wide_1180":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/queue-655819-1770x986b-1180x490.jpg",1180,490,true],"wide_1770":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/queue-655819-1770x986b-1770x735.jpg",1770,735,true],"1536x1536":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/queue-655819-1770x986b.jpg",1536,856,false],"2048x2048":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/04\/queue-655819-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":"Wie erstellt und benutzt man eine Queue in Java? Welche Methoden bietet das Queue-Interface? Mit Beispiel-Code!","public_identification_id":"4badf14657244dbabc074f6fda074917","private_identification_id":"3465184b9ac9440e98c6e096b270cc47","_links":{"self":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/28761","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=28761"}],"version-history":[{"count":10,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/28761\/revisions"}],"predecessor-version":[{"id":41719,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/28761\/revisions\/41719"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media\/29401"}],"wp:attachment":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media?parent=28761"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/categories?post=28761"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/tags?post=28761"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}