Sobes.tech
Junior

Aký je rozdiel medzi ArrayList a List v C#?

sobes.tech AI

Odpoveď od AI

Rozdiely medzi ArrayList a List v C# sú nasledovné:

  • Typovanie:

    • ArrayList uchováva prvky typu object (nešpecifikovaná kolekcia), čo vyžaduje konverziu typu pri získavaní prvkov a znižuje bezpečnosť typu.
    • List<T> je generická kolekcia (T — určený typ), uchováva prvky presne daného typu, zabezpečuje bezpečnosť typu a odstraňuje potrebu konverzie.
  • Výkon:

    • Pridávanie a získavanie prvkov v ArrayList môže byť pomalšie kvôli baleniu (boxing) a rozbaleniu (unboxing) hodnotových typov.
    • List<T> je zvyčajne rýchlejší, najmä pre hodnotové typy, pretože neobsahuje balenie/rozbalenie.
  • Bezpečnosť typu:

    • ArrayList môže obsahovať prvky rôznych typov, čo môže viesť k chybám počas behu.
    • List<T> zabezpečuje bezpečnosť typu počas kompilácie.
  • Implementácia:

    • ArrayList sa nachádza v priestore mien System.Collections.
    • List<T> sa nachádza v priestore mien System.Collections.Generic.
  • Použitie:

    • ArrayList je považovaný za zastaraný a neodporúča sa na používanie v novom kóde.
    • List<T> je preferovanou voľbou pre väčšinu scenárov.

Príklad použitia:

// Použitie ArrayList
System.Collections.ArrayList arrayList = new System.Collections.ArrayList();
arrayList.Add(1);       // int sa balí do object
arrayList.Add("reťazec"); // string sa uchová ako object

int číslo = (int)arrayList[0]; // Je potrebné konvertovať typ

// Použitie List<T>
System.Collections.Generic.List<int> zoznam = new System.Collections.Generic.List<int>();
zoznam.Add(1); // Pridanie int

// int číslo = zoznam[0]; // Konverzia typu nie je potrebná

Tabuľka porovnania:

Vlastnosť ArrayList List<T>
Typovanie Není typizované (object) Generické (T)
Výkon Možná balenie/rozbalenie Vyšší výkon, bez balenia/rozbalenia pre hodnotové typy
Bezpečnosť typu Nízka Vysoká (v čase kompilácie)
Priezor mien System.Collections System.Collections.Generic
Odporúčanie Neodporúča sa Odporúča sa