2008-12-13 12 views
35

Was ist der Unterschied zwischen Arraylist und List in VB.NET ist.NET: Arraylist vs Liste

+0

Links zu docs: [ 'ArrayList'] (http://msdn.microsoft.com/en-us/library/system.collections.arraylist.aspx), ['List'] (http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx) –

Antwort

47

ArrayLists sind im Wesentlichen veraltet, da sie nicht typisiert sind - Sie müssen Umwandlungen mit ihnen verwenden - und sie sind langsamer und weniger Platz sparend für Werttypen, da sie erfordern, dass die Elemente eingerahmt werden.

Generische Listen wurden mit .Net 2.0 eingeführt und sind der Weg zu gehen. Oft ist eine Liste besser als ein Array, mit wenigen Nachteilen.

Da diese Sammlungen Teil der .Net-Basisklassenbibliothek sind, gilt dieser Hinweis auch für C# und für alle .Net-Sprachen, die Generics unterstützen. Dies ist nicht spezifisch für VB.NET.

+0

List ist auch viel effizienter in Bezug auf die Speichernutzung. Siehe http://blogs.msdn.com/b/joshwil/archive/2004/04/13/112598.aspx – PapillonUK

2

Liste Verwendung von Generika machen kann, so dass nur Objekte bestimmter Typen in sie gesetzt werden können, so dass Sie zusätzliche haben Typprüfung und damit Sie die Bearbeitungszeit durch Boxen und Unboxing reduzieren können. Arraylist kann das nicht verwenden. In fast allen Fällen sollten Sie eher eine Liste als eine Arraylist verwenden.

+0

Generics wurde mit. NET 2.0 eingeführt, aber diese Klassen existierten auch davor. Gibt es einen Unterschied in der Art, wie diese Klassen intern geschrieben werden? – MOZILLA

+0

Wenn ich keine andere List-Klasse kenne, ist das falsch. Der vollständige Namespace von List ist System.Collections.Generic.List, was bedeutet, dass er ziemlich spezifisch für die Verwendung mit Generics hinzugefügt wurde. – Kibbee

14

Liste ist eine generische Implementierung von ArrayList. ArrayList speichert alle Objekte als System.Object, die Sie dann in den entsprechenden Typ konvertieren müssen. ArrayLists sind heterogen, List kann nur einen Objekttyp speichern - diesen Typ wird als generischer Parameter angegeben.

List<string> strList; // can store only strings 
List<int> intList; // can store only ints 
ArrayList someList; // can store anything 
+4

Natürlich könnte man technisch immer eine Liste erstellen, die den Typ "Object" speichert und alles darin speichert, denn Alles erbt inhärent vom Objekt. – Kibbee

+28

Und jeder würde zeigen und über dich lachen – Will

3

Arraylist ermöglicht es Ihnen, dies zu schreiben:

Dim customers as new ArrayList 
Dim c as new Customer 
Dim m as new Manager 
customers.Add(c) 
customers.Add(m) 

'This will cause an exception ' 
For each c as Customer in customers 
console.writeline(c.Name) 
Next 

Eine Liste (der Kunde) Objekt von Kundentyp und Typen nur erlaubt, die von Kunden erben, so kann man nicht solche Fehler machen.

Auch wenn Sie Objekte von nicht verwandten Typen in derselben Sammlung ablegen müssen, ist eine List (Of Object) eine bessere Wahl, da explizit angegeben wird, dass es sich um unterschiedliche Typen handelt.