Arraylist vs List

StackOverflow https://stackoverflow.com/questions/391088

  •  23-08-2019
  •  | 
  •  

Frage

sah ich diese Antwort von Jon auf generisches Objekt mit unbekanntem Typ initialisieren :

  

Wenn Sie eine einzelne Sammlung   enthalten mehrere unabhängige Arten von   Werte, jedoch müssen Sie verwenden   List<object>

Ich vergleiche nicht ArrayList vs List<>, aber ArrayList vs List<object>, da beide Elemente vom Typ object Belichtung wird. Was wäre der Vorteil entweder in diesem Fall mit?

EDIT: Es ist kein Problem für die Typsicherheit hier, da beide Klasse object als Element aussetzt. Man muss noch von object auf die gewünschte Art werfen. Ich bin mehr daran interessiert, etwas anderes als Typ Sicherheit.

EDIT: Danke Marc GRA und Sean für die Antwort. Sorry, ich kann nur 1 als Antwort auswählen, so dass ich beide abstimmen.

War es hilfreich?

Lösung

Sie werden in der Lage, die LINQ-Erweiterungsmethoden direkt mit List<object> zu verwenden, aber nicht mit ArrayList, wenn Sie einen Cast<object>() / OfType<object> (dank vs IEnumerable<object> IEnumerable) injizieren. Das lohnt ziemlich viel, auch wenn Sie nicht brauchen, Typsicherheit etc.

Die Geschwindigkeit wird etwa gleich sein; structs noch verpackt werden, usw. - so gibt es nicht viel anders, sie auseinander zu. Abgesehen davon, dass ich neige dazu ArrayList zu sehen „oops, Legacy-Code schreibt jemand wieder ...“ ;-p

Andere Tipps

Ein großer Vorteil List<object> zu verwenden ist, dass in diesen Tagen die meisten Code geschrieben ist die generische Klassen / Schnittstellen zu verwenden. Ich vermute, dass in diesen Tagen die meisten Leute würden eine Methode schreiben, die anstelle eines IList<object> eine IList nimmt. Da ArrayList IList<object> nicht implementiert würden Sie nicht in der Lage eine Array-Liste in diesen Szenarien zu verwenden.

Ich neige dazu, der nicht-generischen Klassen / Schnittstellen als Legacy-Code zu denken und zu vermeiden, dass sie, wenn möglich.

In diesem Fall ArrayList vs. List<Object> dann bemerken Sie keine Unterschiede in der Geschwindigkeit. Möglicherweise gibt es einige Unterschiede in den tatsächlichen Methoden, die auf jedem von diesen zur Verfügung steht, insbesondere in .NET 3.5 und Erweiterungsmethoden zu zählen, aber das hat mehr zu tun mit etwas veralteten Arraylist zu sein als alles anderes.

Ja, neben typsicher ist, generische Sammlungen könnten tatsächlich schneller sein.

Aus der MSDN ( http://msdn.microsoft. com / en-us / library / system.collections.generic.aspx )

  

Die System.Collections.Generic   Namespace enthält Schnittstellen und   Klassen, die zu Gattungs definieren   Sammlungen, die es erlauben Benutzern   stark typisierte Sammlungen erstellen, dass   eine bessere Typsicherheit und   Leistung als nicht-generic stark   typisierte Sammlungen.

einig Benchmarking tun und Sie werden wissen, was am besten durchführt. Ich guestimate, dass der Unterschied sehr klein ist.

List <> ist eine typsichere Version von Arraylist. Es wird garantiert, dass Sie den gleichen Objekttyp in der Sammlung bekommen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top