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:
ArrayListukládá prvky typuobject(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
ArrayListmůž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.
- Přidávání a extrakce prvků v
-
Bezpečnost typů:
ArrayListmůž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:
ArrayListse nachází v prostoru jmenSystem.Collections.List<T>se nachází v prostoru jmenSystem.Collections.Generic.
-
Použití:
ArrayListje 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 |