{"id":29848,"date":"2022-05-16T17:22:00","date_gmt":"2022-05-16T15:22:00","guid":{"rendered":"https:\/\/www.happycoders.eu\/?p=29848"},"modified":"2024-11-27T15:02:04","modified_gmt":"2024-11-27T14:02:04","slug":"queue-implementieren-array","status":"publish","type":"post","link":"https:\/\/www.happycoders.eu\/de\/algorithmen\/queue-implementieren-array\/","title":{"rendered":"Queue mit einem Array implementieren"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Im letzten Teil der Tutorialserie ging es darum, <a href=\"\/de\/algorithmen\/queue-implementieren-linked-list\/\">wie man eine Queue mit einer verketteten Liste implementiert<\/a>. In diesem Teil implementieren wir eine Queue mit einem Array \u2013 zun\u00e4chst eine bounded Queue (also eine mit fester Kapazit\u00e4t) \u2013 und dann eine unbounded Queue (also eine, deren Kapazit\u00e4t sich \u00e4ndern kann).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Beginnen wir mit der einfachen Variante, der bounded Queue.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"implementierung-einer-bounded-queue-mit-einem-array\">Implementierung einer bounded Queue mit einem Array<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Wir legen ein leeres Array an und f\u00fcllen dieses von links nach rechts (also von Index 0 an aufsteigend) mit den in die Queue eingef\u00fcgten Elementen. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die folgende Grafik zeigt eine Queue mit einem Array namens <code>elements<\/code>, das acht Elemente fassen kann. Bisher wurden sechs Elemente in die Queue eingef\u00fcgt. Der <code>tailIndex<\/code> zeigt immer die n\u00e4chste Einf\u00fcgeposition:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full_800\"><img decoding=\"async\" width=\"800\" height=\"202\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-array-800x202.png\" alt=\"Queue mit einem Array implementieren\" class=\"wp-image-29851\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-array-800x202.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-array-224x57.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-array-336x85.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-array-504x127.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-array-672x170.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-array-400x101.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-array-600x152.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-array-944x238.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-array-1200x303.png 1200w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-array.png 1600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><figcaption>Queue mit einem Array implementieren<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Beim Entnehmen der Elemente lesen wir diese ebenfalls von links nach rechts aus und entfernen sie aus dem Array. Der headIndex zeigt dabei immer die n\u00e4chste Leseposition.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die folgende Darstellung zeigt die Queue, nachdem wir vier der sechs Elemente wieder entnommen haben:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full_800\"><img decoding=\"async\" width=\"800\" height=\"202\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-array-dequeued-elements-800x202.png\" alt=\"Queue mit einem Array implementiert: Array in der Mitte gef\u00fcllt\" class=\"wp-image-29852\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-array-dequeued-elements-800x202.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-array-dequeued-elements-224x57.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-array-dequeued-elements-336x85.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-array-dequeued-elements-504x127.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-array-dequeued-elements-672x170.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-array-dequeued-elements-400x101.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-array-dequeued-elements-600x152.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-array-dequeued-elements-944x238.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-array-dequeued-elements-1200x303.png 1200w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-array-dequeued-elements.png 1600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><figcaption>Queue mit einem Array implementiert: Array in der Mitte gef\u00fcllt<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Da wir nun kurz vor dem Ende des Arrays angekommen sind, k\u00f6nnten wir (ohne zus\u00e4tzliche Logik) nur noch zwei Elemente in die Queue schreiben. Um die Queue wieder auf acht Elemente aufzuf\u00fcllen, gibt es zwei L\u00f6sungsm\u00f6glichkeiten:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Wir schieben die verbleibenden Elemente nach links, an den Anfang des Arrays. Diese Operation ist, insbesondere bei gro\u00dfen Arrays, sehr teuer.<\/li><li>Die bessere L\u00f6sung ist ein Ringbuffer (englisch: \"circular array\"). Das bedeutet, dass wir, wenn wir am Ende des Arrays angekommen sind, am Anfang des Arrays fortfahren. Das gilt sowohl f\u00fcr die Schreib- als auch die Leseoperation.<\/li><\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"ringbuffer\">Ringbuffer<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Um die Funktionsweise des Ringbuffers zu verdeutlichen, habe ich das Array aus dem Beispiel kreisf\u00f6rmig dargestellt:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-half_400\"><img decoding=\"async\" width=\"400\" height=\"346\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-2-elements-400x346.png\" alt=\"Queue implementiert mit einem Ringpuffer (&quot;circular array&quot;) - 2 Elemente\" class=\"wp-image-29853\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-2-elements-400x346.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-2-elements-224x194.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-2-elements-336x291.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-2-elements-504x436.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-2-elements-672x581.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-2-elements-600x519.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-2-elements.png 800w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Weitere Elemente f\u00fcgen wir im Uhrzeigersinn ein, im folgenden Beispiel \"mango\", \"fig\", \"pomelo\" und \"apricot\" an die Positionen 6, 7 \u2013 und dann 0 und 1:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-half_400\"><img decoding=\"async\" width=\"400\" height=\"346\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-6-elements-400x346.png\" alt=\"Queue implementiert mit einem Ringpuffer (&quot;circular array&quot;) - 6 Elemente\" class=\"wp-image-29854\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-6-elements-400x346.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-6-elements-224x194.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-6-elements-336x291.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-6-elements-504x436.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-6-elements-672x581.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-6-elements-600x519.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-6-elements.png 800w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Zur\u00fcck in der \"flachen\" Darstellung sieht das Array nunmehr wie folgt aus:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full_800\"><img decoding=\"async\" width=\"800\" height=\"202\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-flat-800x202.png\" alt=\"Queue mit &quot;flacher&quot; Darstellung des Ringpuffers\" class=\"wp-image-29856\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-flat-800x202.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-flat-224x57.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-flat-336x85.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-flat-504x127.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-flat-672x170.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-flat-400x101.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-flat-600x152.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-flat-944x238.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-flat-1200x303.png 1200w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-flat.png 1600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><figcaption>Queue mit \"flacher\" Darstellung des Ringpuffers<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Sowohl in der Kreisdarstellung als auch in dieser ist gut zu sehen, dass nach dem Element \"fig\" an Index 7 das Element \"pomelo\" an Index 0 folgt. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das Entnehmen der Elemente erfolgt analog. Mit jeder Dequeue-Operation wandert der <code>headIndex<\/code> um eine Position nach rechts, wobei auf die 7 nicht die 8, sondern die 0 folgt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"volle-queue-vs-leere-queue\">Volle Queue vs. leere Queue<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>tailIndex<\/code> und <code>headIndex<\/code> liegen sowohl bei einer leeren als auch bei einer vollen Queue auf derselben Position. Damit wir erkennen k\u00f6nnen, wann die Queue voll ist, speichern wir zus\u00e4tzlich die Anzahl der Elemente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So k\u00f6nnte eine volle Queue aussehen:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full_800\"><img decoding=\"async\" width=\"800\" height=\"202\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-full-queue-800x202.png\" alt=\"Queue-Implementierung: voller Ringpuffer\" class=\"wp-image-29864\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-full-queue-800x202.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-full-queue-224x57.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-full-queue-336x85.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-full-queue-504x127.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-full-queue-672x170.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-full-queue-400x101.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-full-queue-600x152.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-full-queue-944x238.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-full-queue-1200x303.png 1200w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-full-queue.png 1600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><figcaption>Queue-Implementierung: voller Ringpuffer<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Und so eine leere (z. B. nachdem aus der eben dargestellten Queue alle acht Elemente entnommen wurden):<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full_800\"><img decoding=\"async\" width=\"800\" height=\"202\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-empty-queue-800x202.png\" alt=\"Queue-Implementierung: leerer Ringpuffer\" class=\"wp-image-29865\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-empty-queue-800x202.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-empty-queue-224x57.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-empty-queue-336x85.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-empty-queue-504x127.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-empty-queue-672x170.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-empty-queue-400x101.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-empty-queue-600x152.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-empty-queue-944x238.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-empty-queue-1200x303.png 1200w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-empty-queue.png 1600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><figcaption>Queue-Implementierung: leerer Ringpuffer<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Das Speichern der Anzahl der Elemente ist nicht die einzige M\u00f6glichkeit, aber eine sehr simple, um eine volle von einer leeren Queue zu unterscheiden. Alternativen sind z. B.:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Man speichert (neben der Anzahl der Elemente) nur den <code>tailIndex<\/code> <em>oder<\/em> den <code>headIndex<\/code> und berechnet den jeweils anderen aus der Anzahl der Elemente (das macht den Code aber deutlich komplexer).<\/li><li>Man speichert die Anzahl der Elemente <em>nicht<\/em> und erkennt eine volle Queue daran, dass <code>tailIndex<\/code> und <code>headIndex<\/code> gleich sind und dass das Array an der Position <code>tailIndex<\/code> kein Element enth\u00e4lt.<\/li><li>Man f\u00fcllt die Queue nicht komplett, sondern l\u00e4sst immer mindestens ein Feld frei.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"quellcode-fuer-die-bounded-queue-mit-einem-array\">Quellcode f\u00fcr die bounded Queue mit einem Array<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Die Implementierung einer bounded Queue mit einem Array ist recht einfach. Du findest den folgenden Code auch in der Klasse <a href=\"https:\/\/github.com\/SvenWoltmann\/java-collections-guide\/blob\/main\/src\/main\/java\/eu\/happycoders\/collections\/queue\/BoundedArrayQueue.java\" target=\"_blank\" rel=\"noreferrer noopener\">BoundedArrayQueue<\/a> im GitHub-Repository.<\/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\">BoundedArrayQueue<\/span>&lt;<span class=\"hljs-title\">E<\/span>&gt; <span class=\"hljs-keyword\">implements<\/span> <span class=\"hljs-title\">Queue<\/span>&lt;<span class=\"hljs-title\">E<\/span>&gt; <\/span>{\n\n  <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">final<\/span> Object&#091;] elements;\n  <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">int<\/span> headIndex;\n  <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">int<\/span> tailIndex;\n  <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">int<\/span> numberOfElements;\n\n  <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-title\">BoundedArrayQueue<\/span><span class=\"hljs-params\">(<span class=\"hljs-keyword\">int<\/span> capacity)<\/span> <\/span>{\n    <span class=\"hljs-keyword\">if<\/span> (capacity &lt; <span class=\"hljs-number\">1<\/span>) {\n      <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> IllegalArgumentException(<span class=\"hljs-string\">\"Capacity must be 1 or higher\"<\/span>);\n    }\n\n    elements = <span class=\"hljs-keyword\">new<\/span> Object&#091;capacity];\n  }\n\n  <span class=\"hljs-meta\">@Override<\/span>\n  <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">enqueue<\/span><span class=\"hljs-params\">(E element)<\/span> <\/span>{\n    <span class=\"hljs-keyword\">if<\/span> (numberOfElements == elements.length) {\n      <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> IllegalStateException(<span class=\"hljs-string\">\"The queue is full\"<\/span>);\n    }\n    elements&#091;tailIndex] = element;\n    tailIndex++;\n    <span class=\"hljs-keyword\">if<\/span> (tailIndex == elements.length) {\n      tailIndex = <span class=\"hljs-number\">0<\/span>;\n    }\n    numberOfElements++;\n  }\n\n  <span class=\"hljs-meta\">@Override<\/span>\n  <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> E <span class=\"hljs-title\">dequeue<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n    <span class=\"hljs-keyword\">final<\/span> E element = elementAtHead();\n    elements&#091;headIndex] = <span class=\"hljs-keyword\">null<\/span>;\n    headIndex++;\n    <span class=\"hljs-keyword\">if<\/span> (headIndex == elements.length) {\n      headIndex = <span class=\"hljs-number\">0<\/span>;\n    }\n    numberOfElements--;\n    <span class=\"hljs-keyword\">return<\/span> element;\n  }\n\n  <span class=\"hljs-meta\">@Override<\/span>\n  <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> E <span class=\"hljs-title\">peek<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n    <span class=\"hljs-keyword\">return<\/span> elementAtHead();\n  }\n\n  <span class=\"hljs-function\"><span class=\"hljs-keyword\">private<\/span> E <span class=\"hljs-title\">elementAtHead<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n    <span class=\"hljs-keyword\">if<\/span> (isEmpty()) {\n      <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> NoSuchElementException();\n    }\n\n    <span class=\"hljs-meta\">@SuppressWarnings<\/span>(<span class=\"hljs-string\">\"unchecked\"<\/span>)\n    E element = (E) elements&#091;headIndex];\n\n    <span class=\"hljs-keyword\">return<\/span> element;\n  }\n\n  <span class=\"hljs-meta\">@Override<\/span>\n  <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">boolean<\/span> <span class=\"hljs-title\">isEmpty<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n    <span class=\"hljs-keyword\">return<\/span> numberOfElements == <span class=\"hljs-number\">0<\/span>;\n  }\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 class=\"wp-block-paragraph\">Beachte, dass <code>BoundedArrayQueue<\/code> <em>nicht<\/em> das Interface <code>java.util.Queue<\/code> implementiert, sondern ein eigenes, das nur die vier Methoden <code>enqueue()<\/code>, <code>dequeue()<\/code>, <code>peek()<\/code> und <code>isEmpty()<\/code> definiert (s. <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/SvenWoltmann\/java-collections-guide\/blob\/main\/src\/main\/java\/eu\/happycoders\/collections\/queue\/Queue.java\" target=\"_blank\">Queue<\/a> im GitHub-Repository):<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" 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\">interface<\/span> <span class=\"hljs-title\">Queue<\/span>&lt;<span class=\"hljs-title\">E<\/span>&gt; <\/span>{\n  <span class=\"hljs-function\"><span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">enqueue<\/span><span class=\"hljs-params\">(E element)<\/span><\/span>;\n  <span class=\"hljs-function\">E <span class=\"hljs-title\">dequeue<\/span><span class=\"hljs-params\">()<\/span><\/span>;\n  <span class=\"hljs-function\">E <span class=\"hljs-title\">peek<\/span><span class=\"hljs-params\">()<\/span><\/span>;\n  <span class=\"hljs-function\"><span class=\"hljs-keyword\">boolean<\/span> <span class=\"hljs-title\">isEmpty<\/span><span class=\"hljs-params\">()<\/span><\/span>;\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><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 class=\"wp-block-paragraph\">Wie du die <code>BoundedArrayQueue<\/code> (und alle anderen Implementierungen des <code>Queue<\/code>-Interfaces) benutzt, kannst du dir im Programm <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/SvenWoltmann\/java-collections-guide\/blob\/main\/src\/main\/java\/eu\/happycoders\/demos\/queue\/QueueDemo.java\" target=\"_blank\">QueueDemo<\/a> ansehen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"implementierung-einer-unbounded-queue-mit-einem-array\">Implementierung einer unbounded Queue mit einem Array<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Etwas komplexer wird die Implementierung f\u00fcr eine unbounded Queue, also eine Queue ohne Gr\u00f6\u00dfenbeschr\u00e4nkung. Ein Array kann ja nicht wachsen. Und selbst wenn \u2013 es d\u00fcrfte nicht <em>am Ende<\/em> wachsen, sondern m\u00fcsste an genau der Stelle freien Platz erzeugen, an der sich <code>tailIndex<\/code> und <code>headIndex<\/code> befinden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Schauen wir uns noch einmal die volle Queue vom Ende des vorherigen Beispiels an:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full_800\"><img decoding=\"async\" width=\"800\" height=\"202\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-full-queue-800x202.png\" alt=\"Queue-Implementierung: volle Queue\" class=\"wp-image-29864\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-full-queue-800x202.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-full-queue-224x57.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-full-queue-336x85.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-full-queue-504x127.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-full-queue-672x170.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-full-queue-400x101.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-full-queue-600x152.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-full-queue-944x238.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-full-queue-1200x303.png 1200w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-full-queue.png 1600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Um ein weiteres Element einzuf\u00fcgen, m\u00fcssen wir die Kapazit\u00e4t der Queue erh\u00f6hen, indem wir das Array vergr\u00f6\u00dfern.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">(Aus Platzgr\u00fcnden in der grafischen Darstellung erh\u00f6hen wir die Kapazit\u00e4t nur um zwei Elemente. In der Realit\u00e4t findet man Erweiterungen um Faktor 1,5 oder 2,0.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wir m\u00fcssten diesen freien Platz allerdings zwischen Ende und Anfang der Queue, also <em>innerhalb<\/em> des Arrays schaffen:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full_800\"><img decoding=\"async\" width=\"800\" height=\"208\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-grow-in-the-middle-800x208.png\" alt=\"Erweiterung des Arrays in der Mitte\" class=\"wp-image-29873\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-grow-in-the-middle-800x208.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-grow-in-the-middle-224x58.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-grow-in-the-middle-336x87.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-grow-in-the-middle-504x131.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-grow-in-the-middle-672x175.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-grow-in-the-middle-400x104.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-grow-in-the-middle-600x156.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-grow-in-the-middle-944x245.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-grow-in-the-middle-1200x312.png 1200w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-grow-in-the-middle.png 1600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><figcaption>Erweiterung des Arrays in der Mitte<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Das ist nicht ohne weiteres m\u00f6glich. Ein Array kann nicht wachsen \u2013 schon gar nicht in der Mitte. Stattdessen m\u00fcssen wir ein neues Array erzeugen und die bestehenden Elemente dorthinein kopieren.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn wir die Elemente aber ohnehin umkopieren m\u00fcssen, k\u00f6nnen wir sie dabei auch in der richtigen Reihenfolge an den Anfang des neuen Arrays kopieren, z. B. so:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full_800\"><img decoding=\"async\" width=\"800\" height=\"208\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-grow-with-unwrapping-800x208.png\" alt=\"Umkopieren in ein neues Array mit Neuanordnung\" class=\"wp-image-29874\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-grow-with-unwrapping-800x208.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-grow-with-unwrapping-224x58.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-grow-with-unwrapping-336x87.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-grow-with-unwrapping-504x131.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-grow-with-unwrapping-672x175.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-grow-with-unwrapping-400x104.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-grow-with-unwrapping-600x156.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-grow-with-unwrapping-944x245.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-grow-with-unwrapping-1200x312.png 1200w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/implement-queue-using-circular-array-grow-with-unwrapping.png 1600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><figcaption>Umkopieren in ein neues Array mit Neuanordnung<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Der Code daf\u00fcr ist gar nicht so kompliziert, wie du im n\u00e4chsten Abschnitt sehen wirst.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"quellcode-fuer-die-unbounded-queue-mit-einem-array\">Quellcode f\u00fcr die unbounded Queue mit einem Array<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Der folgende Code zeigt die Klasse <a href=\"https:\/\/github.com\/SvenWoltmann\/java-collections-guide\/blob\/main\/src\/main\/java\/eu\/happycoders\/collections\/queue\/ArrayQueue.java\" target=\"_blank\" rel=\"noreferrer noopener\">ArrayQueue<\/a> aus dem Tutorial-GitHub-Repository.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Es gibt zwei Konstrukturen: einen, bei dem man die initiale Gr\u00f6\u00dfe des Arrays angeben kann und einen Default-Konstruktor, der die initiale Kapazit\u00e4t auf zehn setzt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bei jedem Aufruf der <code>enqueue()<\/code>-Methode wird gepr\u00fcft, ob das Array voll ist. Wenn das der Fall ist, wird die <code>grow()<\/code>-Methode aufgerufen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Diese ruft zun\u00e4chst <code>calculateNewCapacity()<\/code> auf, um die neue Gr\u00f6\u00dfe des Arrays zu berechnen. Ich habe diese Methode hier in vereinfachter Form wiedergegeben: Sie multipliziert die aktuelle Gr\u00f6\u00dfe mit 1,5.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die <a rel=\"noopener\" href=\"https:\/\/github.com\/SvenWoltmann\/java-collections-guide\/blob\/main\/src\/main\/java\/eu\/happycoders\/collections\/queue\/ArrayQueue.java#L62\" target=\"_blank\">calculateNewCapacity()-Methode im GitHub-Repository<\/a> hat einen ausgefeilteren Algorithmus und stellt sicher, dass eine bestimmte Maximalgr\u00f6\u00dfe nicht \u00fcberschritten wird. Der Fokus dieses Artikels soll jedoch nicht auf der Bestimmung der neuen Gr\u00f6\u00dfe liegen, sondern auf der eigentlichen Erweiterung des Arrays.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dazu wird in der Methode <code>growToNewCapacity()<\/code> das neue Array angelegt, die Elemente an die entsprechenden Positionen im neuen Array kopiert und <code>headIndex<\/code> sowie <code>tailIndex<\/code> neu gesetzt.<\/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\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ArrayQueue<\/span>&lt;<span class=\"hljs-title\">E<\/span>&gt; <span class=\"hljs-keyword\">implements<\/span> <span class=\"hljs-title\">Queue<\/span>&lt;<span class=\"hljs-title\">E<\/span>&gt; <\/span>{\n\n  <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">final<\/span> <span class=\"hljs-keyword\">int<\/span> DEFAULT_INITIAL_CAPACITY = <span class=\"hljs-number\">10<\/span>;\n\n  <span class=\"hljs-keyword\">private<\/span> Object&#091;] elements;\n  <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">int<\/span> headIndex;\n  <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">int<\/span> tailIndex;\n  <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">int<\/span> numberOfElements;\n\n  <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-title\">ArrayQueue<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n    <span class=\"hljs-keyword\">this<\/span>(DEFAULT_INITIAL_CAPACITY);\n  }\n\n  <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-title\">ArrayQueue<\/span><span class=\"hljs-params\">(<span class=\"hljs-keyword\">int<\/span> capacity)<\/span> <\/span>{\n    <span class=\"hljs-keyword\">if<\/span> (capacity &lt; <span class=\"hljs-number\">1<\/span>) {\n      <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> IllegalArgumentException(<span class=\"hljs-string\">\"Capacity must be 1 or higher\"<\/span>);\n    }\n\n    elements = <span class=\"hljs-keyword\">new<\/span> Object&#091;capacity];\n  }\n\n  <span class=\"hljs-meta\">@Override<\/span>\n  <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">enqueue<\/span><span class=\"hljs-params\">(E element)<\/span> <\/span>{\n    <span class=\"hljs-keyword\">if<\/span> (numberOfElements == elements.length) {\n      grow();\n    }\n    elements&#091;tailIndex] = element;\n    tailIndex++;\n    <span class=\"hljs-keyword\">if<\/span> (tailIndex == elements.length) {\n      tailIndex = <span class=\"hljs-number\">0<\/span>;\n    }\n    numberOfElements++;\n  }\n\n  <span class=\"hljs-function\"><span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">grow<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n    <span class=\"hljs-keyword\">int<\/span> newCapacity = calculateNewCapacity(elements.length);\n    growToNewCapacity(newCapacity);\n  }\n\n  <span class=\"hljs-function\"><span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">int<\/span> <span class=\"hljs-title\">calculateNewCapacity<\/span><span class=\"hljs-params\">(<span class=\"hljs-keyword\">int<\/span> currentCapacity)<\/span> <\/span>{\n    <span class=\"hljs-keyword\">return<\/span> currentCapacity + currentCapacity \/ <span class=\"hljs-number\">2<\/span>;\n  }\n\n  <span class=\"hljs-function\"><span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">growToNewCapacity<\/span><span class=\"hljs-params\">(<span class=\"hljs-keyword\">int<\/span> newCapacity)<\/span> <\/span>{\n    Object&#091;] newArray = <span class=\"hljs-keyword\">new<\/span> Object&#091;newCapacity];\n\n    <span class=\"hljs-comment\">\/\/ Copy to the beginning of the new array: tailIndex to end of the old array<\/span>\n    <span class=\"hljs-keyword\">int<\/span> oldArrayLength = elements.length;\n    <span class=\"hljs-keyword\">int<\/span> numberOfElementsAfterTail = oldArrayLength - tailIndex;\n    System.arraycopy(elements, tailIndex, newArray, <span class=\"hljs-number\">0<\/span>, numberOfElementsAfterTail);\n\n    <span class=\"hljs-comment\">\/\/ Append to the new array: beginning to tailIndex of the old array<\/span>\n    <span class=\"hljs-keyword\">if<\/span> (tailIndex &gt; <span class=\"hljs-number\">0<\/span>) {\n      System.arraycopy(elements, <span class=\"hljs-number\">0<\/span>, newArray, numberOfElementsAfterTail, tailIndex);\n    }\n\n    <span class=\"hljs-comment\">\/\/ Adjust head and tail<\/span>\n    headIndex = <span class=\"hljs-number\">0<\/span>;\n    tailIndex = oldArrayLength;\n    elements = newArray;\n  }\n\n  <span class=\"hljs-comment\">\/\/ dequeue(), peek(), elementAtHead(), isEmpty() are the same as in BoundedArrayQueue<\/span>\n\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 class=\"wp-block-paragraph\">Die Methoden <code>dequeue()<\/code>, <code>peek()<\/code>, <code>elementAtHead()<\/code> und <code>isEmpty()<\/code> gleichen denen in der <code>BoundedArrayQueue<\/code> aus dem vorletzten Abschnitt. Ich habe sie daher nicht noch einmal mit abgedruckt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vielleicht ist dir aufgefallen, dass die Queue zwar wachsen, aber nicht wieder schrumpfen kann. Evtl. muss unsere Queue nur bei Lastspitzen eine hohen Zahl von Elementen speichern und w\u00fcrde danach den Speicher mit einem gr\u00f6\u00dftenteils leeren Array belegen. Wir k\u00f6nnten die Queue dahingehend erweitern, dass sie nach einer gewissen Karenzzeit ihren Inhalt wieder in ein kleineres Array umkopiert. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Diese Erweiterung \u00fcberlasse ich dir als \u00dcbungsaufgabe.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"ausblick\">Ausblick<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Im n\u00e4chsten und gleichzeitig letzten Teil dieser Tutorialserie zeige ich dir, <a href=\"\/de\/algorithmen\/priority-queue-implementieren-heap\/\">wie man eine PriorityQueue selbst implementiert<\/a>, und zwar auf Basis eines Min-Heaps.<\/p>\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 implementiert man in Java eine Queue basierend auf einem Array (ohne Java-Collections-Klassen)? Wie w\u00e4chst das Array bei Bedarf?<\/p>\n","protected":false},"author":1,"featured_media":29850,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_titles_title":"","_seopress_titles_desc":"Wie implementiert man in Java eine Queue basierend auf einem Array (ohne Java-Collections-Klassen)? Wie w\u00e4chst das Array bei Bedarf?","_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":"queue mit einem array,Queue basierend auf einem Array","_seopress_news_disabled":"","_seopress_video_disabled":"","_seopress_video":[],"_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":10578,"_post_count":0,"footnotes":""},"categories":[127],"tags":[192],"class_list":["post-29848","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\/05\/swirl-637867.-1770x986jpg.jpg",1770,986,false],"thumbnail":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/swirl-637867.-1770x986jpg.jpg",150,84,false],"medium":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/swirl-637867.-1770x986jpg.jpg",300,167,false],"medium_large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/swirl-637867.-1770x986jpg.jpg",768,428,false],"large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/swirl-637867.-1770x986jpg.jpg",1024,570,false],"feature_thumb_224":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/swirl-637867.-1770x986jpg-224x125.jpg",224,125,true],"feature_thumb_336":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/swirl-637867.-1770x986jpg-336x187.jpg",336,187,true],"feature_thumb_504":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/swirl-637867.-1770x986jpg-504x281.jpg",504,281,true],"feature_thumb_672":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/swirl-637867.-1770x986jpg-672x374.jpg",672,374,true],"half_400":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/swirl-637867.-1770x986jpg-400x223.jpg",400,223,true],"half_600":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/swirl-637867.-1770x986jpg-600x334.jpg",600,334,true],"full_800":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/swirl-637867.-1770x986jpg-800x446.jpg",800,446,true],"full_944":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/swirl-637867.-1770x986jpg-944x526.jpg",944,526,true],"full_1200":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/swirl-637867.-1770x986jpg-1200x668.jpg",1200,668,true],"wide_1180":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/swirl-637867.-1770x986jpg-1180x490.jpg",1180,490,true],"wide_1770":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/swirl-637867.-1770x986jpg-1770x735.jpg",1770,735,true],"1536x1536":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/swirl-637867.-1770x986jpg.jpg",1536,856,false],"2048x2048":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/swirl-637867.-1770x986jpg.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 implementiert man in Java eine Queue basierend auf einem Array (ohne Java-Collections-Klassen)? Wie w\u00e4chst das Array bei Bedarf?","public_identification_id":"33c4479ed0cb4f7eb19e96b54a1438d4","private_identification_id":"810a197d94664d6495495181562534cc","_links":{"self":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/29848","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=29848"}],"version-history":[{"count":10,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/29848\/revisions"}],"predecessor-version":[{"id":30819,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/29848\/revisions\/30819"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media\/29850"}],"wp:attachment":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media?parent=29848"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/categories?post=29848"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/tags?post=29848"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}