{"id":30432,"date":"2022-06-07T22:04:22","date_gmt":"2022-06-07T20:04:22","guid":{"rendered":"https:\/\/www.happycoders.eu\/?p=30432"},"modified":"2024-11-27T15:08:44","modified_gmt":"2024-11-27T14:08:44","slug":"arraydeque-java","status":"publish","type":"post","link":"https:\/\/www.happycoders.eu\/de\/algorithmen\/arraydeque-java\/","title":{"rendered":"Java ArrayDeque (mit Code-Beispielen)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">In diesem Artikel erf\u00e4hrst du alles \u00fcber die Klasse <code>java.util.ArrayDeque<\/code>:<\/p>\n\n\n\n<ul class=\"hc-checked-list wp-block-list\"><li>Was sind die Eigenschaften von <code>ArrayDeque<\/code>?<\/li><li>Wann sollte man es einsetzen?<\/li><li>Wie setzt man es ein (Java-Beispiel)?<\/li><li>Welche Zeitkomplexit\u00e4ten haben die <code>ArrayDeque<\/code>-Operationen?<\/li><li>Was unterscheidet <code>ArrayDeque<\/code> von <code>LinkedList<\/code>?<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Wir befinden uns an diesem Punkt in der Klassenhierarchie:<\/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\/05\/java-ArrayDeque-class-hierarchy.v2-800x500.png\" alt=\"ArrayDeque in der Klassenhierarchie (UML-Klassendiagramm)\" class=\"wp-image-30515\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-ArrayDeque-class-hierarchy.v2-800x500.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-ArrayDeque-class-hierarchy.v2-224x140.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-ArrayDeque-class-hierarchy.v2-336x210.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-ArrayDeque-class-hierarchy.v2-504x315.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-ArrayDeque-class-hierarchy.v2-672x420.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-ArrayDeque-class-hierarchy.v2-400x250.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-ArrayDeque-class-hierarchy.v2-600x375.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-ArrayDeque-class-hierarchy.v2-944x590.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-ArrayDeque-class-hierarchy.v2-1200x750.png 1200w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/java-ArrayDeque-class-hierarchy.v2.png 1600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><figcaption>ArrayDeque in der Klassenhierarchie<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"arraydeque-eigenschaften\">ArrayDeque Eigenschaften<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>ArrayDeque<\/code> basiert \u2013 wie der Name schon sagt \u2013 auf einem Array. Auf dessen Basis wird ein Ringpuffer (\"circular array\") implementiert. Wie der genau funktioniert, erf\u00e4hrst du, wenn wir in einem sp\u00e4teren Teil der Serie selbst ein <a href=\"\/de\/algorithmen\/deque-implementieren-array\/\">Deque mit einem Array implementieren<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das dem <code>ArrayDeque<\/code> zugrunde liegende Array w\u00e4chst bei Bedarf, wird jedoch weder automatisch verkleinert, noch kann es manuell verkleinert werden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die Eigenschaften im Detail:<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes less-line-height\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-center\" data-align=\"center\">Unterliegende Datenstruktur<\/th><th class=\"has-text-align-center\" data-align=\"center\">Thread-safe?<\/th><th class=\"has-text-align-center\" data-align=\"center\">Blocking\/<br>Non-blocking<\/th><th class=\"has-text-align-center\" data-align=\"center\">Bounded\/<br>Unbounded<\/th><th class=\"has-text-align-center\" data-align=\"center\">Iterator Type<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">Array<\/td><td class=\"has-text-align-center\" data-align=\"center\">Nein<\/td><td class=\"has-text-align-center\" data-align=\"center\">Non-blocking<\/td><td class=\"has-text-align-center\" data-align=\"center\">Unbounded<\/td><td class=\"has-text-align-center\" data-align=\"center\">Fail-fast\u00b9<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"hc-footnote wp-block-paragraph\">\u00b9 Fail-fast: Der Iterator wirft eine <code>ConcurrentModificationException<\/code>, wenn w\u00e4hrend der Iteration Elemente in das Deque eingef\u00fcgt oder aus diesem entnommen werden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"einsatzempfehlung\">Einsatzempfehlung<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>ArrayDeque<\/code> ist f\u00fcr single-threaded Anwendungen (und nur daf\u00fcr) eine gute Wahl. Die Tatsache, dass das zugrunde liegende Array nicht verkleinert werden kann, sollte im Auge behalten werden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr multi-threaded Einsatzzwecke solltest du eines der folgendes Deques verwenden:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"\/de\/algorithmen\/concurrentlinkeddeque-java\/\">ConcurrentLinkedDeque<\/a><\/li><li><a href=\"\/de\/algorithmen\/linkedblockingdeque-java\/\">LinkedBlockingDeque<\/a><\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Eine Entscheidungshilfe findest du im Artikel \"<a href=\"\/de\/algorithmen\/java-deque-implementierungen\/\">Deque Implementierungen \u2013 Welche einsetzen?<\/a>\"<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"arraydeque-beispiel\">ArrayDeque Beispiel<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Der folgende Java-Code zeigt, wie man <code>ArrayDeque<\/code> in Java verwendet. Folgendes passiert:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Mehrere Zufallselemente werden zuf\u00e4llig am Kopf oder am Ende des Deques eingef\u00fcgt.<\/li><li>Es wird ausgegeben, ob das Deque leer ist, und welche Elemente es an Kopf und Ende enth\u00e4lt.<\/li><li>Dann werden, bis das Deque leer ist, die Elemente an einer zuf\u00e4lligen Seite entnommen und ausgegeben.<\/li><li>Zuletzt wird noch einmal der Status des Deques angezeigt.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Du findest den Code in der Klasse <a rel=\"noopener\" href=\"https:\/\/github.com\/SvenWoltmann\/java-collections-guide\/blob\/main\/src\/main\/java\/eu\/happycoders\/demos\/deque\/ArrayDequeDemo.java\" target=\"_blank\">ArrayDequeDemo<\/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\">ArrayDequeDemo<\/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    Deque&lt;Integer&gt; deque = <span class=\"hljs-keyword\">new<\/span> ArrayDeque&lt;&gt;();\n\n    <span class=\"hljs-keyword\">for<\/span> (<span class=\"hljs-keyword\">int<\/span> i = <span class=\"hljs-number\">0<\/span>; i &lt; <span class=\"hljs-number\">8<\/span>; i++) {\n      <span class=\"hljs-keyword\">int<\/span> element = ThreadLocalRandom.current().nextInt(<span class=\"hljs-number\">10<\/span>, <span class=\"hljs-number\">100<\/span>);\n      <span class=\"hljs-keyword\">if<\/span> (ThreadLocalRandom.current().nextBoolean()) {\n        deque.offerFirst(element);\n        System.out.println(<span class=\"hljs-string\">\"deque.offerFirst(\"<\/span> + element + <span class=\"hljs-string\">\") --&gt; deque = \"<\/span> + deque);\n      } <span class=\"hljs-keyword\">else<\/span> {\n        deque.offerLast(element);\n        System.out.println(<span class=\"hljs-string\">\"deque.offerLast(\"<\/span> + element + <span class=\"hljs-string\">\")  --&gt; deque = \"<\/span> + deque);\n      }\n    }\n\n    System.out.println();\n    System.out.println(<span class=\"hljs-string\">\"deque.isEmpty()   = \"<\/span> + deque.isEmpty());\n    System.out.println(<span class=\"hljs-string\">\"deque.peekFirst() = \"<\/span> + deque.peekFirst());\n    System.out.println(<span class=\"hljs-string\">\"deque.peekLast()  = \"<\/span> + deque.peekLast());\n    System.out.println();\n\n    <span class=\"hljs-keyword\">while<\/span> (!deque.isEmpty()) {\n      <span class=\"hljs-keyword\">if<\/span> (ThreadLocalRandom.current().nextBoolean()) {\n        System.out.println(<span class=\"hljs-string\">\"deque.pollFirst() = \"<\/span> + deque.pollFirst()\n            + <span class=\"hljs-string\">\" --&gt; deque = \"<\/span> + deque);\n      } <span class=\"hljs-keyword\">else<\/span> {\n        System.out.println(<span class=\"hljs-string\">\"deque.pollLast()  = \"<\/span> + deque.pollLast()\n            + <span class=\"hljs-string\">\" --&gt; deque = \"<\/span> + deque);\n      }\n    }\n\n    System.out.println();\n    System.out.println(<span class=\"hljs-string\">\"deque.isEmpty()   = \"<\/span> + deque.isEmpty());\n    System.out.println(<span class=\"hljs-string\">\"deque.peekFirst() = \"<\/span> + deque.peekFirst());\n    System.out.println(<span class=\"hljs-string\">\"deque.peekLast()  = \"<\/span> + deque.peekLast());\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\">Die Ausgabe des Programms sieht beispielsweise wie folgt aus:<\/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\">deque.offerLast(25)  --&gt; deque = &#091;25]\ndeque.offerFirst(15) --&gt; deque = &#091;15, 25]\ndeque.offerFirst(26) --&gt; deque = &#091;26, 15, 25]\ndeque.offerFirst(39) --&gt; deque = &#091;39, 26, 15, 25]\ndeque.offerLast(25)  --&gt; deque = &#091;39, 26, 15, 25, 25]\ndeque.offerLast(50)  --&gt; deque = &#091;39, 26, 15, 25, 25, 50]\ndeque.offerFirst(95) --&gt; deque = &#091;95, 39, 26, 15, 25, 25, 50]\ndeque.offerLast(66)  --&gt; deque = &#091;95, 39, 26, 15, 25, 25, 50, 66]\n\ndeque.isEmpty()   = false\ndeque.peekFirst() = 95\ndeque.peekLast()  = 66\n\ndeque.pollFirst() = 95 --&gt; deque = &#091;39, 26, 15, 25, 25, 50, 66]\ndeque.pollLast()  = 66 --&gt; deque = &#091;39, 26, 15, 25, 25, 50]\ndeque.pollLast()  = 50 --&gt; deque = &#091;39, 26, 15, 25, 25]\ndeque.pollLast()  = 25 --&gt; deque = &#091;39, 26, 15, 25]\ndeque.pollFirst() = 39 --&gt; deque = &#091;26, 15, 25]\ndeque.pollLast()  = 25 --&gt; deque = &#091;26, 15]\ndeque.pollFirst() = 26 --&gt; deque = &#091;15]\ndeque.pollLast()  = 15 --&gt; deque = &#091;]\n\ndeque.isEmpty()   = true\ndeque.peekFirst() = null\ndeque.peekLast()  = null\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 class=\"wp-block-paragraph\">Die Funktionsweise des <code>ArrayDeque<\/code> ist anhand der Ausgabe sehr sch\u00f6n nachzuvollziehen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"arraydeque-zeitkomplexitaet\">ArrayDeque Zeitkomplexit\u00e4t<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><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 class=\"wp-block-paragraph\">Durch die Verwendung eines Ringbuffers (\"circular array\") m\u00fcssen weder beim Einf\u00fcgen in das Deque noch beim Entnehmen aus dem Deque die Elemente innerhalb des Arrays verschoben werden. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der Aufwand f\u00fcr die Enqueue- und Dequeue-Operationen ist somit unabh\u00e4ngig von der Anzahl der Elemente im Deque, also konstant.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die Zeitkomplexit\u00e4t sowohl f\u00fcr die Enqueue- also auch die Dequeue-Operationen betr\u00e4gt somit: <em>O(1)<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"arraydeque-vs-linkedlist\">ArrayDeque vs. LinkedList<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Eine alternative Implementierung von Deque ist die <a href=\"\/de\/algorithmen\/linkedlist-java\/\">LinkedList<\/a>, die ich im n\u00e4chsten Teil des Tutorials vorstellen werde.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der Unterschied zwischen <code>ArrayDeque<\/code> und <code>LinkedList<\/code> ist die zugrunde liegende Datenstruktur: Array bzw. verkettete Liste.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>ArrayDeque<\/code> ist in den meisten F\u00e4llen schneller als <code>LinkedList<\/code>. Die Gr\u00fcnde daf\u00fcr findest du im Artikel <a href=\"\/de\/algorithmen\/array-vs-linked-list\/\">Unterschiede zwischen Array und Linked List<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"zusammenfassung\">Zusammenfassung<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In diesem Teil der Tutorialserie hast du die Deque-Implementierung <code>ArrayDeque<\/code> und ihre Eigenschaften kennengelernt. <code>ArrayDeque<\/code> ist eine gute Wahl f\u00fcr single-threaded Anwendungen.<\/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 benutzt man das Java ArrayDeque? Wie funktioniert es? Was sind seine Eigenschaften? Vergleich mit LinkedList. Wann sollte man es einsetzen?<\/p>\n","protected":false},"author":1,"featured_media":30479,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_titles_title":"","_seopress_titles_desc":"Wie benutzt man das Java ArrayDeque? Wie funktioniert es? Was sind seine Eigenschaften? Vergleich mit LinkedList. Wann sollte man es einsetzen?","_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":"arraydeque","_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":6001,"_post_count":0,"footnotes":""},"categories":[127],"tags":[195],"class_list":["post-30432","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\/blocks-252602_1770x986.jpg",1770,986,false],"thumbnail":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/blocks-252602_1770x986.jpg",150,84,false],"medium":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/blocks-252602_1770x986.jpg",300,167,false],"medium_large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/blocks-252602_1770x986.jpg",768,428,false],"large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/blocks-252602_1770x986.jpg",1024,570,false],"feature_thumb_224":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/blocks-252602_1770x986-224x125.jpg",224,125,true],"feature_thumb_336":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/blocks-252602_1770x986-336x187.jpg",336,187,true],"feature_thumb_504":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/blocks-252602_1770x986-504x281.jpg",504,281,true],"feature_thumb_672":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/blocks-252602_1770x986-672x374.jpg",672,374,true],"half_400":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/blocks-252602_1770x986-400x223.jpg",400,223,true],"half_600":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/blocks-252602_1770x986-600x334.jpg",600,334,true],"full_800":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/blocks-252602_1770x986-800x446.jpg",800,446,true],"full_944":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/blocks-252602_1770x986-944x526.jpg",944,526,true],"full_1200":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/blocks-252602_1770x986-1200x668.jpg",1200,668,true],"wide_1180":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/blocks-252602_1770x986-1180x490.jpg",1180,490,true],"wide_1770":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/blocks-252602_1770x986-1770x735.jpg",1770,735,true],"1536x1536":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/blocks-252602_1770x986.jpg",1536,856,false],"2048x2048":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/blocks-252602_1770x986.jpg",1770,986,false]},"uagb_author_info":{"display_name":"Sven Woltmann","author_link":"https:\/\/www.happycoders.eu\/de\/author\/sven\/"},"uagb_comment_info":0,"uagb_excerpt":"Wie benutzt man das Java ArrayDeque? Wie funktioniert es? Was sind seine Eigenschaften? Vergleich mit LinkedList. Wann sollte man es einsetzen?","public_identification_id":"1dc6979b796a46f6b45f1a7f954dceb3","private_identification_id":"cf480943fe8a470a887288ba35eaf9da","_links":{"self":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/30432","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=30432"}],"version-history":[{"count":10,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/30432\/revisions"}],"predecessor-version":[{"id":41704,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/30432\/revisions\/41704"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media\/30479"}],"wp:attachment":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media?parent=30432"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/categories?post=30432"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/tags?post=30432"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}