2012-05-25 18 views
14

Mögliche Duplizieren:
When to use ArrayList over array[] in c#?Signifikante Unterschiede in Array vs Array List?

Aus Sicht der Speicher oder Prozessorkosten, wird es scheint ein signifikanter Unterschied zwischen einem Array und einem Arraylist-Objekt zu sein?

+0

@NikhilAgrawal kein Duplikat dieses Themas, da die Frage speziell Leistungsunterschiede betrifft, nicht Verwendungskontext. – Asik

+0

Ich vermute, ArrayList wäre langsamer, da Sie jedes Element im Array beim Abrufen darstellen müssen. – Matthew

Antwort

41

Array (ein System-Namespace) ist ein Datentyp, der durch Aufrufen von Indizes verwendet werden kann. Während der Laufzeit kann man die Größe des Arrays nicht wirklich ändern, es sei denn, man benutzt die Methode, das Array zu kopieren und das alte loszuwerden.

In Visual Studio verwendet Visual Studio eine spezielle Klasse zum Speichern der Daten. Aus diesem Grund ist die Leistung tatsächlich ziemlich schnell. Dies liegt auch daran, dass Sie in einem Array die Größe angeben müssen und somit die Daten nacheinander gespeichert werden.

Beispiele:

int[] myNumbers= new int[5]; 
myNumbers[0] = 16; 

Arraylist (System.Collections Namensraum) ist ein Datentyp-Sammlung. Um eine ArrayList zu füllen, kann man die .Add-Methode verwenden. ArrayLists sind sehr dynamisch in dem Sinne, dass beim Hinzufügen und/oder Entfernen von Elementen die Performance gleich bleibt.

Die interne Struktur einer ArrayList ist ein Array.

Beispiele:

ArrayList myArray = new ArrayList(); 
myArray.Add(“Steph”); 
string str = myArray[0]; 

Die meiste Zeit, neigen wir dazu, Array-Listen anstatt Arrays zu wählen, da wir keine Ahnung haben, wie groß es sich herausstellen wird. Arrays sind ideal, wenn Sie wissen, wie viele Artikel Sie hineinlegen werden. Wann immer es möglich ist, wird empfohlen, Arrays zu verwenden, da dies die Leistung drastisch verbessert.

Array sind Sequenzen von homogenen Daten, während ArrayList eine Sequenz heterogener Daten ist. Aus diesem Grund müssen wir alle Daten in ArrayLists schreiben.

Arrays sind mehrdimensional, aber ArrayList ist immer eindimensional.

Arrays sind stark typisiert und funktionieren gut als Parameter. Wenn Sie die Länge Ihrer Sammlung kennen und diese behoben ist, sollten Sie ein Array verwenden.

ArrayLists sind nicht stark typisiert, jede Insertion oder Retrial benötigt einen Cast, um zu Ihrem ursprünglichen Typ zurückzukehren. Wenn Sie eine Methode benötigen, um eine Liste eines bestimmten Typs zu erstellen, können ArrayLists nicht verwendet werden, da Sie eine ArrayList mit einem beliebigen Typ übergeben können. ArrayLists verwenden intern ein dynamisch expandierendes Array, so dass es auch einen Treffer gibt, um die Größe des internen Arrays zu erweitern, wenn es seine Kapazität erreicht.

+0

Es gibt ein anderes Objekt, eine einfache Liste. Wie vergleicht es mit einer ArrayList? Das scheint eine anspruchsvollere Kontrolle zu sein. –

+2

Eine Liste ist eine Kombination von guten Eigenschaften von Array und Array List. Wie Array enthält es homogene Daten. Wie ArrayList können Sie so viele Daten hinzufügen, wie Sie möchten. –

6

Ein Array ist eine Low-Level-Datenstruktur, die im Wesentlichen einer Region im Speicher zugeordnet ist. Ein ArrayList ist eine Liste variabler Länge, die als ein Array von object implementiert ist, das neu zugeordnet wird, wenn die Liste wächst.

ArrayList hat daher einige Gemeinkosten im Zusammenhang mit der Verwaltung der Größe des internen Arrays und mehr Aufwand im Zusammenhang mit dem Gießen von Objekten auf den richtigen Typ, wenn Sie auf die Liste zugreifen.

Wenn Sie alles als object speichern, bedeutet dies, dass Werttypen beim Schreiben in Box eingereiht und beim Lesen inboxed werden, was für die Leistung extrem schädlich ist. Unter Verwendung von List<T> wird dieses Problem durch eine ähnliche, aber stark typisierte Liste variabler Größen vermieden.

In der Tat ist ArrayList seit .NET 2.0 praktisch zugunsten List<T> veraltet.

+0

Es gibt ein anderes Objekt, eine einfache Liste. Wie vergleicht es mit einer ArrayList? Das scheint eine anspruchsvollere Kontrolle zu sein. –

+0

@MikeOlson Ich erklärte das in meiner Antwort bereits ... hast du es gelesen? – Asik

+0

Entschuldigung Ja ich las es aber war nicht sicher, ob die Liste die gleiche wie die einfache Liste war. Also im Grunde hat diese einfache Liste im Grunde die Array-Liste zugunsten der Benutzerfreundlichkeit ersetzt? –

1

Ein Array ist ein zusammenhängender Speicherblock mit fester Größe, während eine ArrayList (obwohl Sie List seit .NET 2.0 bevorzugen) ein Array umschließt, um dynamisch skalierbaren Speicher bereitzustellen.

Der "Unterschied" zwischen ihnen ist, dass, soweit sie eingekapselt sind, eine ArrayList in der Größe veränderbar ist, ein Array ist nicht. Was die Implementierung betrifft: Da eine ArrayList Arrays umschließt (und neu zuordnet), benötigt sie etwas mehr Speicher als ein Array (da sie die aktuelle Anzahl der Elemente im Gegensatz zu ihrer Kapazität kennen muss), außerdem eine ArrayList benötigt CPU-Zeit, um sein internes Array neu zuzuweisen und zu kopieren, wenn es jemals seine interne Kapazität erreicht.

Die Instantiierung einer ArrayList ist jedoch nicht teurer als die Zuweisung eines Arrays. Der einzige Unterschied besteht darin, dass eine Handvoll Anweisungen benötigt wird, um den Status der ArrayList zu initialisieren. Der Unterschied ist vernachlässigbar und es lohnt sich nicht, sich darüber Gedanken zu machen.

Sie werden feststellen, dass Sie ArrayList/List besser verwenden können, wenn Sie ein Array selbst als Mittel zum Erstellen einer resizierbaren Sammlung neu zuweisen, da es gründlich getestet wurde.

+1

Es gibt ein anderes Objekt namens eine einfache Liste. Wie vergleicht es mit einer ArrayList? Das scheint eine anspruchsvollere Kontrolle zu sein. –

+0

Der Hauptunterschied zwischen ArrayList und Generic List besteht darin, dass die generische Liste typsicher ist, die Arraylist dagegen nicht. – DinoMyte