Warum Listen die besseren Arrays sind

Und warum das nur die halbe Wahrheit ist.
Veröffentlicht: vor 5 monaten · Lesedauer ca. 5 Minuten

Was ist, wenn du 10 Werte eines bestimmten Typs verwenden möchtest? 

Du kannst dir dafür ein Array erstellen. Ein Array deswegen, weil du genau weißt, wie viele Werte du hast. Du benötigst 10. Nicht mehr, nicht weniger.

Genau 10.

Was ist aber, wenn du nicht genau weißt, wie viele Werte du brauchst? Oder die Menge sich im Laufe des Lebenszyklus sich verändert?

Dann kommt man mit dem Array nicht mehr weiter.

Wie du ein Array erweiterst

Natürlich kannst du auch dieses Problem lösen. In C/C++ muss man sich um den Speicher komplett selber kümmern.

Wenn man mehr Speicher benötigt, muss man zunächst den Speicherplatz allokieren.

Du kannst es dir so vorstellen wie ein Antrag beim Finanzamt. 

Mit unserem Array ist es genau so. Bloß hier ist es so, dass ein neues Array erstellt werden muss und alle Werte von A nach B kopiert werden müssen. Anschließend muss das alte Array aufgeräumt werden.

Dies geschieht in etwa so:

int[] numbers = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int[] tmp = new int[20];
for (int i = 0; i < numbers.Length; i++)
{
tmp[i] = numbers[i];
}
numbers = tmp;
tmp = null;

Nicht gerade schön, oder? 

Es gibt da noch ein weiteres, weitaus größeres Problem.

Das neue Array befindet sich an einem neuen Speicherplatz. Daher kennen alle anderen Objekte das neue Array natürlich nicht. Das neue Array muss erst publiziert werden. 

Du kannst es dir so vorstellen, als ob du ein Haus baust, um aus einer Wohnung dahin ziehst.

Die alten Briefe kommen ja auch nicht automatisch bei dir an. Und deine Freunde würden auch vor verschlossener Tür stehen, wenn du die nicht benachrichtigst.

Wie du eine Liste verwendest

Was ist jetzt das besondere an Listen

Du brauchst dir um die Größe absolut keine Gedanken zu machen. 

Du brauchst erst 10 Einträge? Dann füge die 10 Einträge hinzu. Du brauchst dann nochmal 10? Oder 20?

Kein Problem. Dafür gibt es die Add Methode.

numbers.Add(42);

Du möchtest ein Eintrag an der 5. Stelle bearbeiten? Auch kein Problem.

Du möchtest ein Eintrag an 50. Stelle eintragen, auch wenn die Liste nur 10 Elemente hat?

Warum solltest du sowas tun wollen? Aber auch das geht natürlich.

List numbers = GetTenNumbers();
for (int i = numbers.Count; i < 50; i++)
{
numbers.Add(0);
}
numbers.Add(42);

Bei einer Liste baust du kein neues Haus. Du machst ein Anbau. Der Anbau kann auch eine Finca auf Male sein. Egal, dein Hauptwohnsitz ist ja immer noch derselbe.

Liste, das bessere Array?

Seien wir ehrlich, in 80% der Fälle, wird in C# kein Array verwendet, sondern eine Liste. Und wieder 80% von den 80% gibt uns C# bereits ein Array vor. Sei es als Byte-Array, beim Einlesen einer Datei oder auch ein String-Array ein diversen String Operationen.

Aber auch das Einlesen eines Verzeichnisses gibt ein FileInfo-Array zurück.

Bleiben nur noch insgesamt 4% übrig. Da verwenden wir nämlich das Array explizit. Hier geht es wirklich um High-Performance Applikationen.

Ein Array ist zwar nicht ganz so dynamisch wie eine Liste, dafür um einiges performanter. Wie du hier und hier nachlesen kannst.

Array vs List – Die Hauptunterschiede

educba.com hat vor einiger Zeit eine kleine Zusammenfassung erstellt, die die Hauptmerkmale beider Varianten ganz schön zusammenfasst. Diese Grafik möchte ich dir natürlich nicht vorenthalten:

C# Array vs.List

Fazit – Array vs. List

Wie du sehen kannst, ist eine Liste in C# ziemlich bequem zu benutzen. Man muss sich nicht mehr um irgendwelche Indizes kümmern und kann munter Einträge zur Liste hinzufügen (oder auch entfernen)

Ja, eine Liste ist zwar langsamer als ein Array, aber seien wir mal ehrlich: im normalen Gebrauch fallen die paar Millisekunden doch gar nicht auf.

Erst wenn man sehr große Datenmenge hat, merkt man den Unterschied. Und wahrscheinlich sind dann die anderen Operationen drumherum so langsam, dass man den Unterschied sowieso nicht merkt.

Seien wir ehrlich, ob eine Operation 30 Sekunden oder 31 Sekunden dauert, spielt doch im Endeffekt keine Rolle, oder?

Kategorien:
Grundlagen
Schlagwörter:
... und was meinst du dazu?
Deine E-Mail-Adresse wird nicht veröffentlicht.