Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Grundlagen der Programmierung: Datenstrukturen

Veränderbare Arrays

Testen Sie unsere 2016 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Veränderbare Arrays werden von verschiedenen Programmiersprachen zusätzlich zu den Standardarrays zur Verfügung gestellt. Oft sind es Klassen oder Objekte. Und damit stellt sich die Frage, wo und wie Elemente eingefügt oder entfernt werden können.

Transkript

Es ist in vielen Sprachen so, dass ein normales Array, einmal angelegt, nicht mehr verändert werde kann. Sie können es mit beliebig vielen Elementen erzeugen, und die Elemente selbst können ihre Werte ändern, aber Sie können keine Elemente hinzufügen und auch keine entfernen. Ausnahmen bestätigen die Regel. Das Standard-Array von JavaScript etwa ist schon ein größenveränderbares Array. Ähnliches gilt für Ruby. Aber andere Programmiersprachen stellen eben eigene Arrays zur Verfügung, wenn's um Veränderungen geht. Die laufen dann unter Namen wie veränderbares Array, dynamisches Array oder auch mutable Array. Wie auch immer. Sehen wir uns das Ganze mal im Beispiel Java an. Bei Java ist es so, dass das Standard-Array eine fixe Größe hat. Es ist nicht nur eine fixe Größe, sondern auch ein fixer Datentyp, der da zum Einsatz kommt. Also ein Array mit Integers oder ein Array mit Boole'schen Werten, und also objektorientierte Sprache kann es auch ein Array mit Zeichenketten geben. Aber für eine größenveränderbare Version bietet Java eine eigene Klasse an. Die bekannteste Klasse davon ist wahrscheinlich die ArrayList. Es wird also anstatt eines Arrays ein ArrayList-Objekt erzeugt. Es wird also eine andere Syntax verwendet. ArrayList gehört nicht zum Korps der Sprache, sondern muss als externes Framework dazugeladen werden. ArrayLists können völlig leer erzeugt werden oder schon mit einführenden Werten. Aber danach ist die ArrayList erzeugt und ich kann dieses Objekt als veränderbar aufrufen. Wir können Methoden hinzufügen, was bei einem Standard-Array eben nicht geht, und wir können Methoden auch wieder entfernen. Ebenso ist es bei Objective C. Da ist es spannend, weil es als Abart von C natürlich grundsätzlich ein fixes Array hat. Aber auch hier ist es so, dass die Entwickler dann eher NSArray verwenden. Lassen Sie sich von der Syntax nicht ins Bockshorn jagen, das ist eine verkürzte Form. NSArray selber ist einmal fix, aber, ähnlich wie bei Java, gibt es auch eine veränderbare Version. Das ist dann NSMutableArray. Auch hier ist es so, dass das NSMutableArray dann zusätzliche Methoden heranziehen kann, und die Vorgehensweise ist ganz ähnlich wie bei Java. Es ist generell so, dass dieses Vorgehen quer durch die ganzen Programmmiersprachen ähnlich vonstatten geht. Wir haben eine Datenstruktur, von der man annehmen könnte, dass sie nur ein leicht verändertes Verhalten an den Tag legt, aber in Wirklichkeit wird eine völlig eigene Klasse eingefügt. Wann immer wir neue Elemente zu einem Array hinzufügen, stellt sich natürlich die Frage, wo fügen wir sie hinzu? Am einfachsten ist das ganze, wenn wir's am Ende einfügen. Am Ende ist es einfach so, dass dann der Index um eins erweitert wird und der neue Wert, in unserem Fall 999, eingefügt wird. Anders sieht's aus, wenn so ein Wert in der Mitte eingefügt werden soll. Hier haben wir zum Beispiel mit add jetzt nicht nur den Wert angegeben, sondern auch die Position. Also den Indexwert, an dem es eingefügt werden soll. Das heißt aber, dass jetzt ein ziemliches Herumgeschiebe stattfinden muss, damit dieser Wert eingetragen werden kann. Es muss also Platz geschaffen werden und alle Werte, die danach kommen, müssen um eins verschoben werden. damit dann dieser neue Wert Platz hat. Wenn wir's nur mit einer Handvoll Daten zu tun haben, ist das nicht wirklich das Drama. Aber stellen Sie sich vor, Sie haben's mit tausenden von Daten zu tun, die verschoben werden müssen. Dann ist es gut zu wissen, dass das Performance-Einbußen bringen kann, wenn man dann mit so einem veränderbaren Array arbeitet und nicht eine Struktur nimmt, die besser für solche Aufgaben geeignet ist. Trotzdem ist es sehr beruhigend zu wissen, dass diese veränderen Arrays, von denen wir jetzt gerade sprechen, wie zum Beispiel die ArrayList in Java oder NSMutableArray in Objective C, oder auch in Ruby oder JavaScript eingebaute Versionen, automatisch auf diese Details achten, wann wo wie was verschoben wird. Dass alle Einträge korrekt verschoben werden, dafür gibt's unterschiedliche Methoden. Aber nur, weil etwas im Hintergrund passiert, heißt das nicht, dass es nicht Einfluss auf die Performance hat. Je größer das Array wird, je mehr Einträge verschoben und neu indiziert werden müssen, um so mehr fällt es ins Gewicht, wie dieses Neuorganisieren der Einträge unter der Motorhaube vor sich geht. Sie haben einerseits die Variante, dass tatsächlich Daten verschoben werden. Es gibt aber auch die Variante, dass das ganze Array kopiert und mit diesen verschobenen neuen Ansichten quasi neu erzeugt wird. Welche Version auch immer verwendet wird, findet wie gesagt unter der Motorhaube statt. Es ist nur für Sie als Programmierer wichtig zu wissen, wie Ihr Programm im Speziellen mit dieser Problemlage umgeht. Oft müssen wir die Entscheidungen, wie wir das Element einfügen wollen, mitgeben. Da gibt's jetzt unterschiedliche Vorgehensweisen. Wenn wir Elemente am Ende eines Arrays einfügen wollen, ist es zum Beispiel so, dass es mit Java mit add und dem Wert stattfindet. Oder bei Objective C mit add object und dem Wert. Das kommt dann am Ende dazu. Bei JavaScript ist es push und der betreffende Wert. Bei Ruby ist es ebenfalls push. Bei Python ist es append und der Wert. Wenn wir ein Element nicht am Ende, sondern an einem speziellen Indexort einfügen wollen, müssen wir natürlich auch noch diesen Index mitgeben. Auch da ist es so, dass ich bei Java mit add arbeiten kann und dann gebe ich den Indexort und den Wert an. Bei Objective C ist es addObject mit dem Wert und add index mit dem Index. Bei Ruby ist es einfach insert mit dem Index und dem Wert Und bei Python ist es auch insert mit Index und Wert. Bei JavaScript spricht man von splice. Da wird einfach das Array in der Mitte auseinandergeschoben und das Element an dieser Stelle eingefügt. Bei Python ist es spannend zu erwähnen, dass wir ja eigentlich mit einer Datenstruktur namens List arbeiten. Aber nachdem sich diese List ähnlich verhält wie woanders ein Array, wird das hier mit angefügt. Wir laufen jetzt Gefahr, ein ganz klein wenig den Überblick zu verlieren vor lauter speziellen Bezeichnungen. Sie müssen sich die Schlüsselworte nicht merken. Hier geht's eher um das dahinterliegende Prinzip. Es geht darum, festzumachen, dass diese Funktionalität in jeder denkbaren Sprache hinterlegt ist. Dass nur dann die Funktionalität eventuell einen anderen Namen hat. Wenn Sie also Elemente hinzufügen wollen, haben Sie's mit einer Variante von add, insert oder push zu tun. Wenn Sie ein Element aus einem Array entfernen wollen, haben Sie es dann eben analog mit Worten wie remove zu tun. Oder in Objective C mit removeObjectAtIndex. In JavaScript ist es pop. In Ruby ist es pop. Wenn ich's von einem bestimmten Ort entfernen möchte, kommt noch delete_at hinzu. In Python ist es pop und remove. Ich möchte nicht zum Ausdruck bringen, dass wir in dieser Fülle von Möglichkeiten quasi ersticken sollen, sondern ich möchte zeigen, dass es letztendlich nur fünf Dinge gibt, die wir für uns im Zusammenhang mit Programmieren verwenden wollen und die für uns von Bedeutung sind. Diese fünf Dinge sind diese fünf Anforderungen an eine Datenstruktur. Ich möchte auf Daten zugreifen können. Ich möchte Daten einfügen können. Ich möchte Daten entfernen können. Ich möchte Daten finden können. Und ich möchte Daten sortieren können. Das Spannende im Zusammenhang mit Datenstrukturen ist das, dass Sie das nicht unbedingt alles mit Datenstrukturen tun können. Jede Datenstruktur hat sich auf eine oder mehrere der Anforderungen spezialisiert. Beim Zugreifen ist es zum Beispiel so, möchte ich ein bestimmtes Element haben und sofort darauf zugreifen können, oder muss ich den gesamten Datenstrom durchlaufen, um dann dieses eine Element finden zu können. Beim Einfügen ist die Frage, füge ich's am Ende ein oder füge ich's an einer bestimmten Position ein. Beim Entfernen genau dasselbe. Vom Ende lässt sich's leichter entfernen als von einer bestimmten Position. Und beim Finden, also bei find, ist erstens die Frage: Existiert das Element überhaupt? Weiß ich, wie's heißt? Und dann: An welcher Position kann ich's finden. Sortieren ist dann überhaupt noch ein ganz eigenes Thema. Wird vor Ort sortiert oder wird eine neue sortierte Version erzeugt? All diese fünf Anforderungen sind das, womit Sie bei Datenstrukturen permanent zu tun haben. Und wie gesagt, nicht jede Datenstruktur kann diese fünf Anforderungen erfüllen. Manche können nur eins, zwei erfüllen, viele können nicht sortieren. Zum Beispiel suchen kann in einem Stack ein Riesenproblem werden, weil da die Daten quasi kunterbunt im Durcheinander liegen. Im Unterschied zu einem Array, wo ich punktgenau etwas finden kann, sofern ich den Index kenne. So. Wir haben jetzt von veränderbaren Arrays gesprochen und diese Abläufe mit push und pull und insert und add sind Abläufe, denen Sie immer wieder begegnen werden und die auch immer wieder ähnlich heißen.

Grundlagen der Programmierung: Datenstrukturen

Erhalten Sieeinen klaren Eindruck von Datenstrukturen und deren Eigenheiten und verstehen, wie Sie diese am besten einsetzen können – ganz unabhängig von den einzelnen Programmiersprachen.

2 Std. 51 min (29 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!