{"id":30544,"date":"2022-05-23T15:27:43","date_gmt":"2022-05-23T13:27:43","guid":{"rendered":"https:\/\/www.happycoders.eu\/?p=30544"},"modified":"2024-11-27T15:03:45","modified_gmt":"2024-11-27T14:03:45","slug":"array-vs-linked-list","status":"publish","type":"post","link":"https:\/\/www.happycoders.eu\/de\/algorithmen\/array-vs-linked-list\/","title":{"rendered":"Array vs. Linked List"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Arrays und verkettete Listen (Linked Lists) sind Datenstrukturen, die Elemente eines bestimmten Typs sequentiell anordnen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Allerdings gibt es gro\u00dfe Unterschiede, und abh\u00e4ngig von den Anforderungen hat die Auswahl der Datenstruktur einen erheblichen Einfluss auf den Speicherbedarf und die Performance der Anwendung.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dieser Artikel beantwortet die folgenden Fragen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Was sind die Unterschiede zwischen Array und Linked List?<\/li>\n\n\n\n<li>Was sie die Vor- und Nachteile der jeweils einen Datenstruktur gegen\u00fcber der anderen?<\/li>\n\n\n\n<li>Welche Zeitkomplexit\u00e4t haben die verschiedenen Operationen (wie Zugriff auf ein Element, Einf\u00fcgen, Entfernen, Bestimmen der Gr\u00f6\u00dfe)?<\/li>\n\n\n\n<li>Wann solltest du welche Datenstruktur verwenden?<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Beginnen wir mit einem Vergleich beider Datenstrukturen...<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"unterschied-zwischen-array-und-linked-list\">Unterschied zwischen Array und Linked List<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Die folgende Grafik zeigt den grunds\u00e4tzlichen Aufbau beider Datenstrukturen, wobei ich die verkettete Liste sowohl als einfach als auch als doppelt verkettete Liste dargestellt habe:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full_800\"><img decoding=\"async\" width=\"800\" height=\"225\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-800x225.png\" alt=\"Array, Singly Linked List, Doubly Linked List\" class=\"wp-image-30667\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-800x225.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-224x63.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-336x95.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-504x142.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-672x189.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-400x113.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-600x169.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-944x266.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-1200x338.png 1200w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List.png 1600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\">Array \u2013 Singly Linked List \u2013 Doubly Linked List<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Ein Array ist ein zusammenh\u00e4ngender Speicherblock, der die Datenelemente\u00b9 direkt enth\u00e4lt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eine verkettete Liste besteht aus Listenknoten, die jeweils ein Datenelement\u00b9 enthalten sowie eine Referenz auf den n\u00e4chsten Knoten (und \u2013 bei einer doppelt verketteten Liste \u2013 auf den vorherigen Knoten).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die folgenden Abschnitte vergleichen die Konsequenzen, die sich aus dem Aufbau der beiden Datenstrukturen ergeben, in Bezug auf den Aufwand beim Einf\u00fcgen und Entfernen von Elementen, den ben\u00f6tigten Speicherplatz und den Lokalit\u00e4tseffekt (was das bedeutet, erkl\u00e4re ich im entsprechenden Abschnitt).<\/p>\n\n\n\n<p class=\"hc-footnote wp-block-paragraph\">\u00b9 Ein Datenelement kann ein primitives Element sein, z. B. ein <code>int<\/code>, <code>double<\/code> oder <code>char<\/code>, oder eine Referenz auf ein Objekt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"array-vs-linked-list-zeitkomplexitaet\">Array vs. Linked List: Zeitkomplexit\u00e4t<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Beginnen wir mit dem Aufwand f\u00fcr die verschiedenen Operationen.<\/p>\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<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"zugriff-auf-ein-bestimmtes-element-random-access\">Zugriff auf ein bestimmtes Element (\"Random Access\")<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Bei einem Array k\u00f6nnen wir jedes Element direkt adressieren. Es macht vom Aufwand her keinen Unterschied, wie lang das Array ist oder an welcher Position wir ein Element lesen oder schreiben.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Im Array-Beispiel macht es keinen Unterschied, ob wir auf das \"a\" oder das \"p\" zugreifen:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-half_600 is-resized\"><img decoding=\"async\" width=\"600\" height=\"90\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-random-access-a-600x90.png\" alt=\"Zugriff auf ein bestimmtes Element (&quot;Random Access&quot;) eines Arrays\" class=\"wp-image-30672\" style=\"width:600px;height:90px\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-random-access-a-600x90.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-random-access-a-224x34.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-random-access-a-336x50.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-random-access-a-504x76.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-random-access-a-672x101.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-random-access-a-400x60.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-random-access-a-800x120.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-random-access-a-944x142.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-random-access-a.png 1200w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><figcaption class=\"wp-element-caption\">Zugriff auf ein bestimmtes Element (\"Random Access\") eines Arrays<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Der Aufwand ist also konstant. Die Zeitkomplexit\u00e4t f\u00fcr den (schreibenden oder lesenden) Zugriff auf ein bestimmtes Elements eines Array betr\u00e4gt somit: <em>O(1)<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bei einer verketteten Liste hingegen k\u00f6nnen wir nur auf das erste Element direkt zugreifen. F\u00fcr alle anderen m\u00fcssen wir der Liste Knoten f\u00fcr Knoten folgen, bis wir das gew\u00fcnschte Element erreicht haben.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Im Linked-List-Beispiel ben\u00f6tigen wir mehr Schritte, um das \"p\" zu erreichen als um das \"a\" zu erreichen:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-half_600\"><img decoding=\"async\" width=\"600\" height=\"90\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-random-access-ll-600x90.png\" alt=\"Zugriff auf ein bestimmtes Element (&quot;Random Access&quot;) einer verketteten Liste\" class=\"wp-image-30673\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-random-access-ll-600x90.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-random-access-ll-224x34.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-random-access-ll-336x50.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-random-access-ll-504x76.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-random-access-ll-672x101.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-random-access-ll-400x60.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-random-access-ll-800x120.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-random-access-ll-944x142.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-random-access-ll.png 1200w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><figcaption class=\"wp-element-caption\">Zugriff auf ein bestimmtes Element (\"Random Access\") einer verketteten Liste<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Bei einem zuf\u00e4llig verteilten Zugriff auf die Elemente ist der mittlere Aufwand proportional zur L\u00e4nge der Liste. Die Zeitkomplexit\u00e4t betr\u00e4gt also: <em>O(n)<\/em><\/p>\n\n\n<div class=\"convertkit-form wp-block-convertkit-form\" style=\"\"><script async data-uid=\"5c918c0177\" src=\"https:\/\/happycoders.kit.com\/5c918c0177\/index.js\" data-jetpack-boost=\"ignore\" data-no-defer=\"1\" data-no-optimize=\"1\" nowprocket><\/script><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"hinzufuegen-oder-entfernen-eines-elements\">Hinzuf\u00fcgen oder Entfernen eines Elements<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Bei einer Linked List k\u00f6nnen wir an jeder beliebigen Stelle Knoten einf\u00fcgen und entfernen. Der Aufwand daf\u00fcr ist immer gleich, unabh\u00e4ngig davon, wie lang die Liste ist und an welcher Position wir einf\u00fcgen (vorausgesetzt, wir haben eine Referenz auf den Knoten, an dem wir einf\u00fcgen\/entfernen wollen).<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full_800\"><img decoding=\"async\" width=\"800\" height=\"344\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-insertion-ll.v2-800x344.png\" alt=\"Element in eine Linked List einf\u00fcgen: O(1)\" class=\"wp-image-30681\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-insertion-ll.v2-800x344.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-insertion-ll.v2-224x96.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-insertion-ll.v2-336x144.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-insertion-ll.v2-504x217.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-insertion-ll.v2-672x289.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-insertion-ll.v2-400x172.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-insertion-ll.v2-600x258.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-insertion-ll.v2-944x406.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-insertion-ll.v2-1200x516.png 1200w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-insertion-ll.v2.png 1600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\">Element in eine Linked List einf\u00fcgen: <em>O(1)<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Die Zeitkomplexit\u00e4t f\u00fcr das Einf\u00fcgen in und Entfernen aus einer verketteten Liste lautet also: <em>O(1)<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ein Array kann seine Gr\u00f6\u00dfe nicht \u00e4ndern. Um ein Element einzuf\u00fcgen oder zu entfernen m\u00fcssen wir das Array immer in ein neues, gr\u00f6\u00dferes oder kleineres Array umkopieren:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-half_400\"><img decoding=\"async\" width=\"400\" height=\"352\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-insertion-a-400x352.png\" alt=\"Element in ein Array einf\u00fcgen: O(n)\" class=\"wp-image-30682\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-insertion-a-400x352.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-insertion-a-224x197.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-insertion-a-336x296.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-insertion-a-504x444.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-insertion-a-672x591.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-insertion-a-600x528.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-insertion-a.png 800w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><figcaption class=\"wp-element-caption\">Element in ein Array einf\u00fcgen: <em>O(n)<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Der Aufwand daf\u00fcr ist proportional zur L\u00e4nge des Arrays. Die Zeitkomplexit\u00e4t lautet somit: <em>O(n)<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Datenstrukturen wie z. B. Javas <code>ArrayList<\/code> haben eine Strategie zur Verringerung der durchschnittlichen Zeitkomplexit\u00e4t beim Einf\u00fcgen und Entfernen von Elementen: Indem sie im Array Platz f\u00fcr neue Elemente reservieren, sowohl beim Anlegen als auch beim Vergr\u00f6\u00dfern, k\u00f6nnen sie die Zeitkomplexit\u00e4t \u2013 zumindest f\u00fcr das Einf\u00fcgen und Entfernen <em>am Ende<\/em> einer Array-basierten Datenstruktur \u2013 auf <em>O(1)<\/em> reduzieren.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mit einem Ringbuffer (englisch: \"circular array\") k\u00f6nnen wir auch die Zeitkomplexit\u00e4t f\u00fcr das Einf\u00fcgen und Entfernen <em>am Anfang<\/em> einer array-basierten Datenstruktur auf <em>O(1)<\/em> reduzieren. So wird z. B. das <a href=\"\/de\/algorithmen\/arraydeque-java\/\">Java ArrayDeque<\/a> realisiert.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"groessenbestimmung\">Gr\u00f6\u00dfenbestimmung<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Die <a href=\"\/de\/java\/array-laenge-java\/\">Gr\u00f6\u00dfe eines Arrays<\/a> ist bekannt und kann z. B. in Java \u00fcber <code>array.length<\/code> abgefragt werden. Der Aufwand daf\u00fcr ist unabh\u00e4ngig von der L\u00e4nge des Arrays, also konstant.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die Zeitkomplexit\u00e4t f\u00fcr die Bestimmung der L\u00e4nge eines Arrays lautet somit: <em>O(1)<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bei einer verketteten Liste hingegeben m\u00fcssen wir die gesamte Liste ablaufen und die Listenknoten z\u00e4hlen. Je l\u00e4nger die Liste, desto l\u00e4nger dauert das Z\u00e4hlen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die Zeitkomplexit\u00e4t f\u00fcr die Bestimmung der L\u00e4nge einer Linked List lautet somit: <em>O(n)<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Einige auf verketteten Listen basierende Datenstrukturen (z. B. die <a href=\"\/de\/algorithmen\/linkedlist-java\/\">Java LinkedList<\/a>) speichern die Gr\u00f6\u00dfe zus\u00e4tzlich in einem Feld ab, das sie beim Einf\u00fcgen und Entfernen aktualisieren \u2013 so kann auch die Gr\u00f6\u00dfe solcher Datenstrukturen mit konstantem Aufwand, also <em>O(1)<\/em>, abgefragt werden. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"uebersicht-zeitkomplexitaet\">\u00dcbersicht Zeitkomplexit\u00e4t<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Die folgende Tabelle fasst die Zeitkomplexit\u00e4ten der verschiedenen Operationen zusammen:<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><thead><tr><th>Operation<\/th><th class=\"has-text-align-center\" data-align=\"center\">Array<\/th><th class=\"has-text-align-center\" data-align=\"center\">Linked List<\/th><\/tr><\/thead><tbody><tr><td>Zugriff auf das n-te Element:<\/td><td class=\"has-text-align-center\" data-align=\"center\"><em>O(1)<\/em><\/td><td class=\"has-text-align-center\" data-align=\"center\"><em>O(n)<\/em><\/td><\/tr><tr><td>Einf\u00fcgen eines Elements:<\/td><td class=\"has-text-align-center\" data-align=\"center\"><em>O(n)<\/em><\/td><td class=\"has-text-align-center\" data-align=\"center\"><em>O(1)<\/em><\/td><\/tr><tr><td>Entfernen eines Elements:<\/td><td class=\"has-text-align-center\" data-align=\"center\"><em>O(n)<\/em><\/td><td class=\"has-text-align-center\" data-align=\"center\"><em>O(1)<\/em><\/td><\/tr><tr><td>Bestimmung der L\u00e4nge:<\/td><td class=\"has-text-align-center\" data-align=\"center\"><em>O(1)<\/em><\/td><td class=\"has-text-align-center\" data-align=\"center\"><em>O(n)<\/em><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Der Zugriff auf ein Element (lesend oder schreibend) und die L\u00e4ngenbestimmung sind also bei einem Array g\u00fcnstiger \u2013 Einf\u00fcgen und Entfernen hingegen bei einer Linked List.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"array-vs-linked-list-speicherverbrauch\">Array vs. Linked List: Speicherverbrauch<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Bei einem Array ben\u00f6tigt jedes Feld so viel Speicherplatz wie der darin enthaltene Datentyp. Ein Array mit <code>int<\/code>-Primitiven beispielsweise ben\u00f6tigt 4 Byte pro Eintrag:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-half_400\"><img decoding=\"async\" width=\"400\" height=\"55\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-a-400x55.png\" alt=\"Speicherverbrauch eines int-Arrays: 4 Byte pro Eintrag\" class=\"wp-image-30685\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-a-400x55.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-a-224x31.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-a-336x46.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-a-504x69.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-a-672x92.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-a-600x83.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-a.png 800w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><figcaption class=\"wp-element-caption\">Speicherverbrauch eines int-Arrays: 4 Byte pro Eintrag<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Bei einer verketteten Liste hingegen m\u00fcssen f\u00fcr jeden Knoten sowohl das Datenelement als auch Referenzen auf Nachfolger- und ggf. Vorg\u00e4ngerknoten gespeichert werden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bleiben wir bei den <code>int<\/code>-Primitiven und gehen wir von 4 Byte\u00b9 pro Referenz aus, dann kommen wir bei einer einfach verketteten Liste auf 8 Byte pro Element.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bei JVM-Sprachen kommen allerdings pro Knoten noch 12 Byte f\u00fcr den Header des Knotenobjekts hinzu \u2013 sowie 4 F\u00fcllbytes, da Objekte ein Vielfaches von 8 Bytes an Speicher belegen m\u00fcssen.\u00b9 Insgesamt ben\u00f6tigen wir also 24 Byte pro Listenknoten.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full_800\"><img decoding=\"async\" width=\"800\" height=\"161\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-java-sll-800x161.png\" alt=\"Speicherverbrauch einer einfach verketteten Liste in Java: 24 Byte pro Knoten\" class=\"wp-image-30695\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-java-sll-800x161.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-java-sll-224x45.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-java-sll-336x68.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-java-sll-504x101.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-java-sll-672x135.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-java-sll-400x81.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-java-sll-600x121.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-java-sll-944x190.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-java-sll-1200x242.png 1200w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-java-sll.png 1600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\">Speicherverbrauch einer einfach verketteten Liste in Java: 24 Byte pro Knoten<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Bei einer doppelt verketteten Liste ben\u00f6tigen wir eine weitere Referenz, wir kommen also auf 12 Byte pro Eintrag.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bei JVM-basierten Sprachen kommen die 12 Byte f\u00fcr den <a href=\"https:\/\/www.happycoders.eu\/de\/java\/object-headers-compressed-class-pointers\/#mark-word\">Objekt-Header<\/a> hinzu. Insgesamt bleibt es aber bei 24 Byte, da die zus\u00e4tzlichen vier Bytes den Platz einnehmen, den vorher die F\u00fcllbytes belegt haben.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full_800\"><img decoding=\"async\" width=\"800\" height=\"161\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-java-dll-800x161.png\" alt=\"Speicherverbrauch einer doppelt verketteten Liste in Java: 24 Byte pro Knoten\" class=\"wp-image-30686\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-java-dll-800x161.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-java-dll-224x45.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-java-dll-336x68.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-java-dll-504x101.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-java-dll-672x135.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-java-dll-400x81.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-java-dll-600x121.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-java-dll-944x190.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-java-dll-1200x242.png 1200w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-usage-java-dll.png 1600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\">Speicherverbrauch einer doppelt verketteten Liste in Java: 24 Byte pro Knoten<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Die folgende Tabelle zeigt den Speicherbedarf pro Feld f\u00fcr ein Array und eine Linked List \u2013 jeweils f\u00fcr C\/C++ und JVM-basierte Sprachen:<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><thead><tr><th>Sprache<\/th><th class=\"has-text-align-center\" data-align=\"center\">Array<\/th><th class=\"has-text-align-center\" data-align=\"center\">Einfach verkettete Liste<\/th><th class=\"has-text-align-center\" data-align=\"center\">Doppelt verkettete Liste<\/th><\/tr><\/thead><tbody><tr><td>C\/C++:<\/td><td class=\"has-text-align-center\" data-align=\"center\">4 Bytes<\/td><td class=\"has-text-align-center\" data-align=\"center\">8 Bytes<\/td><td class=\"has-text-align-center\" data-align=\"center\">12 Bytes<\/td><\/tr><tr><td>JVM-Sprache:<\/td><td class=\"has-text-align-center\" data-align=\"center\">4 Bytes<\/td><td class=\"has-text-align-center\" data-align=\"center\">24 Bytes\u00b9<\/td><td class=\"has-text-align-center\" data-align=\"center\">24 Bytes\u00b9<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Bis hierhin spricht der Speicherverbrauch f\u00fcr das Array \u2013 ganz besonders in Java.<\/p>\n\n\n\n<p class=\"hc-footnote wp-block-paragraph\">(\u00b9 Ich gehe bei den Speicherbetrachtungen von einer 64-Bit-JVM mit aktivierten <a href=\"https:\/\/www.happycoders.eu\/de\/java\/object-headers-compressed-class-pointers\/#compressed-class-pointers\" target=\"_blank\" rel=\"noreferrer noopener\">Compressed Class Pointers<\/a> und aktivierten <a href=\"https:\/\/www.happycoders.eu\/de\/java\/compressed-oops\/\">Compressed Oops<\/a> aus.)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"speichereffizienz\">Speichereffizienz<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">So eindeutig f\u00e4llt der Vergleich allerdings nur aus, wenn wir die Gr\u00f6\u00dfe der Datenstruktur vorab kennen und sie sich nicht \u00e4ndert.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bei einer Array-basierten Datenstruktur, deren Gr\u00f6\u00dfe sich \u00e4ndern kann, z. B. der Java <code>ArrayList<\/code>, wird \u2013 wie oben erw\u00e4hnt \u2013 meist eine Reserve f\u00fcr neue Elemente freigehalten. Bei einer verketteten Liste hingegen wird erst dann, wenn ein Element eingef\u00fcgt wird, der Speicher f\u00fcr dieses Element \u2013 und <em>nur<\/em> f\u00fcr dieses Element \u2013 allokiert.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-half_600\"><img decoding=\"async\" width=\"600\" height=\"117\" src=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-efficiency-600x117.png\" alt=\"Array vs. Linked List: Speichereffizienz\" class=\"wp-image-30689\" srcset=\"https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-efficiency-600x117.png 600w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-efficiency-224x44.png 224w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-efficiency-336x66.png 336w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-efficiency-504x98.png 504w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-efficiency-672x131.png 672w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-efficiency-400x78.png 400w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-efficiency-800x156.png 800w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-efficiency-944x184.png 944w, https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/Array-vs-Linked-List-memory-efficiency.png 1200w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><figcaption class=\"wp-element-caption\">Array vs. Linked List: Speichereffizienz<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Analoges gilt f\u00fcr das Entfernen von Elementen. Bei einer Array-basierten Datenstruktur wird das Feld in der Regel f\u00fcr zuk\u00fcnftige Einf\u00fcgeoperationen freigelassen. Bei einer Linked List wird es sofort gel\u00f6scht (bzw. f\u00fcr das L\u00f6schen durch den Garbage Collector freigegeben).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Linked Lists sind also speichereffizienter als Arrays.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Zusammengefasst: bei gleicher L\u00e4nge ben\u00f6tigt eine Linked List mindestens doppelt so viel Speicherplatz wie ein Array \u2013 in Java sogar das Sechsfache! Bei variierender L\u00e4nge kann eine Array-basierte Datenstruktur jedoch ungenutzten Speicherplatz blockieren, so dass diese beiden Faktoren gegeneinander abgew\u00e4gt werden m\u00fcssen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"array-vs-linked-list-lokalitaetseffekt\">Array vs. Linked List: Lokalit\u00e4tseffekt<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Um die Frage \"Was ist schneller \u2013 ein Array oder eine Linked List?\" zu beantworten, m\u00fcssen wir noch einen weiteren Faktor ber\u00fccksichtigen: den Lokalit\u00e4tseffekt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Da der Speicher f\u00fcr ein Array am St\u00fcck allokiert wird, liegen dessen Elemente an aufeinanderfolgenden Speicheradressen. Beim Zugriff auf den Hauptspeicher werden alle Array-Elemente, die auf derselben Memory Page liegen, gleichzeitig in den CPU-Cache geladen. Sobald wir auf ein Array-Element zugegriffen haben, k\u00f6nnen wir also sehr schnell auf die benachbarten Elemente zugreifen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die Knoten einer verketteten Listen hingegen werden an beliebigen Stellen im Speicher allokiert, k\u00f6nnen also \u00fcber den gesamten Speicher verteilt sein. Beim Traversieren einer  verketteten Liste m\u00fcsste also im worst case f\u00fcr jedes Element eine neue Memory Page geladen werden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"vorteile-der-linked-list-gegenueber-dem-array\">Vorteile der Linked List gegen\u00fcber dem Array<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In diesem und dem n\u00e4chsten Abschnitt fasse ich die Vor- und Nachteile von Array und Linked List noch einmal zusammen. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Warum ist eine Linked List besser als ein Array?<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Elemente k\u00f6nnen mit konstantem Aufwand eingef\u00fcgt und entfernt werden.<\/li>\n\n\n\n<li>Die Linked List belegt keinen ungenutzten Speicher.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"vorteile-des-arrays-gegenueber-der-linked-list\">Vorteile des Arrays gegen\u00fcber der Linked List<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Und wann ist ein Array besser als eine Linked List?<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Wir k\u00f6nnen auf jedes beliebige Element des Arrays (\"random access\") in konstanter Zeit zugreifen.<\/li>\n\n\n\n<li>Wir k\u00f6nnen ein Array von hinten nach vorne traversieren \u2013 das ist bei einer einfach verketteten Liste nicht m\u00f6glich, nur bei einer doppelt verketteten. <\/li>\n\n\n\n<li>Ein Array belegt \u2013 bei gleicher Anzahl Elemente \u2013 deutlich weniger Speicher als eine verkettete Liste (C\/C++: Faktor 2\u20133; Java: Faktor 6).<\/li>\n\n\n\n<li>Durch den Lokalit\u00e4tseffekt k\u00f6nnen wir bei einem Array auf nah nebeneinander liegende Elemente deutlich schneller zugreifen.<\/li>\n\n\n\n<li>Der Garbage Collector kann bei einem Array eine Reachability-Analyse deutlich schneller durchf\u00fchren als bei einer Linked List.<\/li>\n\n\n\n<li>Beim L\u00f6schen eines Arrays wird ein zusammenh\u00e4ngender Speicherbereich freigegeben, w\u00e4hrend das L\u00f6schen einer verketteten Liste einen fragmentierten Speicher zur\u00fcckl\u00e4sst.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"fazit-wann-ein-array-benutzen-und-wann-eine-linked-list\">Fazit: Wann ein Array benutzen und wann eine Linked List?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Die Frage \"Welche Datenstruktur ist besser \u2013 Array oder Linked List?\" l\u00e4sst sich, wie so vieles, nur mit einem \"Es kommt darauf an\" beantworten.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn oft Elemente in der Mitte der Datenstruktur eingef\u00fcgt oder entfernt werden, dann sollte eine verkettete Liste die bessere Wahl sein.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr alle anderen Anwendungsf\u00e4lle liefern in der Regel Array-basierte Datenstrukturen eine bessere Performance und einen besseren Memory Footprint und sollten daher bevorzugt eingesetzt werden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn du vermutest, dass f\u00fcr deinen Einsatzzweck eine Linked List besser geeignet ist, dann probier es einfach aus. F\u00fchre Messungen durch, und entscheide dich basierend auf den Messergebnissen.<\/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>Was ist der Unterschied zwischen Array und Linked List? Was sind die Vor- und Nachteile? Wann solltest du welche Datenstruktur einsetzen?<\/p>\n","protected":false},"author":1,"featured_media":30711,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_titles_title":"","_seopress_titles_desc":"Was ist der Unterschied zwischen Array und Linked List? Was sind die Vor- und Nachteile? Wann solltest du welche Datenstruktur 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":"Array und Linked List,array vs linked list,array vs. linked list,array und verkettete liste,Arrays und verkettete Listen","_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":11756,"_post_count":0,"footnotes":""},"categories":[127],"tags":[136,196],"class_list":["post-30544","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-algorithmen","tag-algorithmen-allgemein","tag-datenstrukturen-allgemein"],"uagb_featured_image_src":{"full":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/ferrybridge-5428427_1770x986.v2.jpg",1770,986,false],"thumbnail":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/ferrybridge-5428427_1770x986.v2.jpg",150,84,false],"medium":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/ferrybridge-5428427_1770x986.v2.jpg",300,167,false],"medium_large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/ferrybridge-5428427_1770x986.v2.jpg",768,428,false],"large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/ferrybridge-5428427_1770x986.v2.jpg",1024,570,false],"feature_thumb_224":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/ferrybridge-5428427_1770x986.v2-224x125.jpg",224,125,true],"feature_thumb_336":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/ferrybridge-5428427_1770x986.v2-336x187.jpg",336,187,true],"feature_thumb_504":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/ferrybridge-5428427_1770x986.v2-504x281.jpg",504,281,true],"feature_thumb_672":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/ferrybridge-5428427_1770x986.v2-672x374.jpg",672,374,true],"half_400":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/ferrybridge-5428427_1770x986.v2-400x223.jpg",400,223,true],"half_600":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/ferrybridge-5428427_1770x986.v2-600x334.jpg",600,334,true],"full_800":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/ferrybridge-5428427_1770x986.v2-800x446.jpg",800,446,true],"full_944":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/ferrybridge-5428427_1770x986.v2-944x526.jpg",944,526,true],"full_1200":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/ferrybridge-5428427_1770x986.v2-1200x668.jpg",1200,668,true],"wide_1180":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/ferrybridge-5428427_1770x986.v2-1180x490.jpg",1180,490,true],"wide_1770":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/ferrybridge-5428427_1770x986.v2-1770x735.jpg",1770,735,true],"1536x1536":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/ferrybridge-5428427_1770x986.v2.jpg",1536,856,false],"2048x2048":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2022\/05\/ferrybridge-5428427_1770x986.v2.jpg",1770,986,false]},"uagb_author_info":{"display_name":"Sven Woltmann","author_link":"https:\/\/www.happycoders.eu\/de\/author\/sven\/"},"uagb_comment_info":0,"uagb_excerpt":"Was ist der Unterschied zwischen Array und Linked List? Was sind die Vor- und Nachteile? Wann solltest du welche Datenstruktur einsetzen?","public_identification_id":"251026bc882445bd8e3b1277770564a3","private_identification_id":"d682df1eb0014f09942582fbb9ad39b5","_links":{"self":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/30544","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=30544"}],"version-history":[{"count":10,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/30544\/revisions"}],"predecessor-version":[{"id":41564,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/30544\/revisions\/41564"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media\/30711"}],"wp:attachment":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media?parent=30544"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/categories?post=30544"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/tags?post=30544"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}