Typy kolekce seznam a ArrayList
Objekty System.Collections.ArrayList nebo System.Collections.Generic.List<T> jsou složité verze pole. Třída ArrayList a obecná třída List<T> obsahují některé vlastnosti, které jsou nabízeny ve většině tříd System.Collections, ale které nejsou ve třídě Array. Příklad:
Kapacita Array je stanovena, zatímco kapacita ArrayList nebo List<T> je automaticky rozšířena podle požadavků. Pokud je hodnota vlastnosti ArrayList.Capacity změněna, pak je přerozdělení paměti a kopírování prvků automaticky provedeno.
ArrayList a List<T> poskytují metody, které slouží k přidání, vložení nebo odebrání rozsahu prvků. V Array můžete získat nebo zadat hodnotu pouze jednoho elementu v dané době.
Synchronizované verze ArrayList je snadné vytvářet pomocí metody Synchronized; avšak tento typ synchronizace je relativně neefektivní. Třídy Array a List<T> nechávají implementaci synchronizace na uživateli. Obor názvů System.Collections.Concurrent neposkytuje současný typ seznamu, ale poskytuje typ ConcurrentQueue<T> a ConcurrentStack<T>.
ArrayList a List<T> poskytují metody, které vracejí obálky s pevnou velikostí a jen pro čtení. Array toto nepodporuje
Na druhé straně, Array nabízí pružnost, kterou ArrayList a List<T> nenabízí. Příklad:
Můžete nastavit dolní mez u Array. Ale dolní mez ArrayList nebo List<T> je vždy nula.
Array může mít více dimenzí, ale ArrayList nebo List<T> má vždy přesně jednu dimenzi. Můžete však snadno vytvořit seznam polí nebo seznamů.
Array určitého typu (jiného než typu Object) poskytuje lepší výkon než ArrayList. Důvodem je, že prvky ArrayList jsou typu Object; proto zabalení a rozbalení obvykle nastává při ukládání nebo načítání typu hodnoty. Avšak List<T> může poskytnout výkon podobný poli stejného typu, pokud nejsou požadovány přesuny. Tzn. pokud je počáteční kapacita dobrým odhadem maximální velikostí seznamu.
Většina situací, které požadují pole, mohou použít ArrayList nebo místo toho List<T>, jsou snadněji použitelné a obecně mají výkon podobný poli stejného typu.
Array je v oboru názvů System, ArrayList je v oboru názvů System.Collections, List<T> je v oboru názvů System.Collections.Generic.