Freigeben über


ArrayList-Auflistungstyp und List-Auflistungstyp

Ein System.Collections.ArrayList- oder System.Collections.Generic.List<T>-Objekt ist eine komplexe Version eines Arrays. Die ArrayList-Klasse und die generische List<T>-Klasse enthalten einige Funktionen, die von den meisten System.Collections-Klassen, aber nicht von der Array-Klasse bereitgestellt werden. Beispiel:

  • Die Kapazität von Array ist festgelegt, während die Kapazität von ArrayList oder List<T> je nach Bedarf automatisch angepasst wird. Wenn der Wert der ArrayList.Capacity-Eigenschaft geändert wird, werden die Neubelegung des Speichers und das Kopieren der Elemente automatisch vorgenommen.

  • ArrayList und List<T> stellen Methoden zum Hinzufügen, Einfügen oder Entfernen vollständiger Elementbereiche bereit. Bei einem Array kann nur jeweils der Wert eines einzigen Elements zur gleichen Zeit abgerufen oder festgelegt werden.

  • Eine synchronisierte Version von ArrayList kann einfach mit der Synchronized-Methode erstellt werden, diese Art der Synchronisierung ist jedoch wenig effizient. Bei den Array- und List<T>-Klassen bleibt die Implementierung einer Synchronisierung den Benutzern überlassen. Der System.Collections.Concurrent-Namespace stellt keinen Concurrent-Listentyp bereit, aber einen ConcurrentQueue<T>- und ConcurrentStack<T>-Typ.

  • ArrayList und List<T> stellen Methoden bereit, die Wrapper mit Schreibschutz und fester Größe an die Auflistung zurückgeben. Dies trifft auf Array nicht zu.

Andererseits bietet Array eine Flexibilität, die ArrayList und List<T> nicht aufweisen. Beispiel:

  • Die untere Grenze von Array kann festgelegt werden, die von ArrayList oder List<T> ist jedoch immer 0 (null).

  • Array kann über mehrere Dimensionen verfügen, während ArrayList oder List<T> immer genau eine Dimension aufweisen. Sie können jedoch leicht eine Liste von Arrays oder eine Liste von Listen erstellen.

  • Ein Array eines bestimmten Typs (außer Object) bietet eine bessere Leistung als eine ArrayList. Das liegt daran, dass die Elemente der ArrayList den Typ Object aufweisen. Boxing und Unboxing treten daher i. d. R. auf, wenn Sie einen Werttyp speichern oder abrufen. List<T> kann jedoch ein ähnliches Leistungsverhalten wie ein Array desselben Typs aufweisen, wenn keine Neuzuordnung erforderlich ist, d. h. wenn die Anfangskapazität annähernd der Maximalgröße der Liste entspricht.

In den meisten Situationen, in denen ein Array verwendet werden soll, können Sie stattdessen ArrayList oder List<T> verwenden, da sie benutzerfreundlicher sind und im Allgemeinen dieselbe Leistung wie ein Array desselben Typs erbringen.

Array befindet sich im System-Namespace. ArrayList befindet sich im System.Collections-Namespace. List<T> befindet sich im System.Collections.Generic-Namespace.

Siehe auch

Referenz

ArrayList

System.Collections

List<T>

System.Collections.Generic

Array

System.Collections.Concurrent

Weitere Ressourcen

Häufig verwendete Auflistungstypen