Sobes.tech
Junior

Jaký je rozdíl mezi ArrayList a List v C#?

sobes.tech AI

Odpověď od AI

Rozdíly mezi ArrayList a List v C# jsou následující:

  • Typizace:

    • ArrayList ukládá prvky typu object (nepoužitá kolekce), což vyžaduje převod typu při extrakci prvků a snižuje bezpečnost typů.
    • List<T> je generická kolekce (T — určený typ), která ukládá prvky přesně daného typu, zajišťuje bezpečnost typů a odstraňuje potřebu převodu.
  • Výkon:

    • Přidávání a extrakce prvků v ArrayList může být pomalejší kvůli boxing a unboxing hodnotových typů.
    • List<T> je obvykle rychlejší, zejména pro hodnotové typy, protože neprobíhá boxing/unboxing.
  • Bezpečnost typů:

    • ArrayList může obsahovat prvky různých typů, což může vést k chybám za běhu.
    • List<T> poskytuje bezpečnost typů při kompilaci.
  • Implementace:

    • ArrayList se nachází v prostoru jmen System.Collections.
    • List<T> se nachází v prostoru jmen System.Collections.Generic.
  • Použití:

    • ArrayList je považován za zastaralý a nedoporučuje se jeho použití v novém kódu.
    • List<T> je preferovanou volbou pro většinu scénářů.

Příklad použití:

// Použití ArrayList
System.Collections.ArrayList arrayList = new System.Collections.ArrayList();
arrayList.Add(1);       // int je zabalen do object
arrayList.Add("řetězec"); // string je uložen jako object

int číslo = (int)arrayList[0]; // je potřeba převod typu

// Použití List<T>
System.Collections.Generic.List<int> list = new System.Collections.Generic.List<int>();
list.Add(1); // přidání int

// int číslo = list[0]; // není potřeba převod typu

Porovnávací tabulka:

Vlastnost ArrayList List<T>
Typizace Nepoužitá (object) Generická (T)
Výkon Možný boxing/unboxing Vyšší, bez boxing/unboxing pro hodnotové typy
Bezpečnost typů Nízká Vysoká (při kompilaci)
Název prostoru System.Collections System.Collections.Generic
Doporučení Nedoporučuje se Doporučeno