MyClass[] array;
List<MyClass> list;
Welche Szenarien gibt es, in denen das eine dem anderen vorzuziehen ist? Und warum?
MyClass[] array;
List<MyClass> list;
Welche Szenarien gibt es, in denen das eine dem anderen vorzuziehen ist? Und warum?
Anstatt die Eigenschaften der einzelnen Datentypen zu vergleichen, denke ich, dass die pragmatischste Antwort lautet: "Die Unterschiede sind wahrscheinlich nicht so wichtig für das, was Sie erreichen müssen, vor allem, da sie beide implementieren IEnumerable
Daher sollten Sie der gängigen Konvention folgen und ein List
bis Sie einen Grund haben, es nicht zu tun, und dann haben Sie wahrscheinlich Ihren Grund, ein Array statt einer List
."
Die meiste Zeit in verwaltetem Code werden Sie Sammlungen bevorzugen, die so einfach wie möglich zu handhaben sind, anstatt sich um Mikrooptimierungen zu kümmern.
Listen in .NET sind Umhüllungen von Arrays und verwenden intern ein Array. Die zeitliche Komplexität der Operationen auf Listen ist die gleiche wie bei Arrays, jedoch gibt es ein wenig mehr Overhead mit all der zusätzlichen Funktionalität / Benutzerfreundlichkeit von Listen (wie automatische Größenänderung und die Methoden, die mit der Listenklasse kommen). Im Großen und Ganzen würde ich die Verwendung von Listen in allen Fällen empfehlen, es sei denn, es gibt einen zwingenden Grund no zu tun, z. B. wenn Sie extrem optimierten Code schreiben müssen oder mit anderem Code arbeiten, der um Arrays herum aufgebaut ist.
Sie mögen unpopulär sein, aber ich bin ein Fan von Arrays in Spielprojekten. - Iterationsgeschwindigkeit kann in einigen Fällen wichtig sein, foreach auf einem Array hat deutlich weniger Overhead, wenn Sie nicht viel pro Element tun - Hinzufügen und Entfernen ist mit Hilfsfunktionen nicht so schwer - Es ist zwar langsamer, aber in Fällen, in denen man es nur einmal erstellt, spielt es vielleicht keine Rolle. - In den meisten Fällen wird weniger zusätzlicher Speicher verschwendet (nur wirklich signifikant bei Arrays von Structs) - Etwas weniger Müll, Zeiger und Zeigerjagd
Davon abgesehen verwende ich in der Praxis viel häufiger Listen als Arrays, aber beide haben ihren Platz.
Es wäre schön, wenn List ein eingebauter Typ wäre, so dass der Wrapper- und Aufzählungs-Overhead optimiert werden könnte.
Das Auffüllen einer Liste ist einfacher als das eines Arrays. Bei Arrays müssen Sie die genaue Länge der Daten kennen, aber bei Listen kann die Datengröße beliebig sein. Außerdem können Sie eine Liste in ein Array umwandeln.
List<URLDTO> urls = new List<URLDTO>();
urls.Add(new URLDTO() {
key = "wiki",
url = "https://...",
});
urls.Add(new URLDTO()
{
key = "url",
url = "http://...",
});
urls.Add(new URLDTO()
{
key = "dir",
url = "https://...",
});
// convert a list into an array: URLDTO[]
return urls.ToArray();
Es kommt ganz darauf an, in welchem Zusammenhang die Datenstruktur benötigt wird. Wenn Sie z. B. Elemente erstellen, die von anderen Funktionen oder Diensten verwendet werden sollen, ist die Verwendung von "List" der perfekte Weg, um dies zu erreichen.
Wenn Sie nun eine Liste von Elementen haben und diese nur anzeigen wollen, z. B. auf einer Webseite, ist Array der Container, den Sie verwenden müssen.
Wenn Sie eine Liste von Elementen haben und diese nur anzeigen möchten, was ist dann falsch daran, einfach die Liste zu verwenden, die Sie bereits haben? Was würde ein Array hier bieten?
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
13 Stimmen
Arrays sind eher veraltet, wie in einem beliebte Diskussion hier. Auch hier hervorgehoben und von unserem Gastgeber im Blog .
11 Stimmen
Wenn ich mich nicht irre, hat die List<> ein Array als interne Struktur. Immer wenn das interne Array gefüllt ist, wird der Inhalt einfach in ein Array kopiert, das doppelt so groß ist (oder eine andere Konstante, die die aktuelle Größe angibt). de.wikipedia.org/wiki/Dynamische_Anordnung
0 Stimmen
Ykok: Was du sagst, scheint zu stimmen, ich habe den Quellcode von Liste<> hier .
42 Stimmen
@gimel Die Behauptung, dass Arrays veraltet sind, ist vielleicht ein wenig gewagt