Porovnanie List, Dictionary a Collection v .NET

Pri vývoji v .NET narazíme veľmi rýchlo na kolekcie. Medzi najpoužívanejšie patria List<T>, Dictionary<TKey, TValue> a Collection<T>. Na prvý pohľad robia všetky to isté – držia v sebe objekty – no ich použitie a správanie je odlišné.

List<T>

List<T> je najčastejšie používaná kolekcia v .NET. Ide o dynamické pole, ktoré si zväčšuje kapacitu podľa potreby.

  • Ukladá prvky v poradí, v akom ich pridávame.
  • Prístup k prvku podľa indexu je veľmi rýchly (O(1)).
  • Vyhľadávanie prvku podľa hodnoty je lineárne (O(n)).
  • Používa sa, keď nám stačí „zoznam vecí“ bez potreby kľúčov.

// príklad použitia List<T>
var numbers = new List<int>();
numbers.Add(10);
numbers.Add(20);

int first = numbers[0];      // 10
bool contains20 = numbers.Contains(20);

Dictionary<TKey, TValue>

Dictionary<TKey, TValue> je kolekcia párov kľúč – hodnota. Hodnotu nevyhľadávame podľa pozície, ale podľa kľúča.

  • Prístup k hodnote podľa kľúča je veľmi rýchly (typicky O(1)).
  • Kľúče musia byť v rámci dictionary jedinečné.
  • Pri zmene hodnoty cez kľúč nepreiterujeme celú kolekciu.
  • Výborné, keď potrebujeme niečo ako „index“ – napr. vyhľadávanie podľa ID alebo kódu.

// príklad použitia Dictionary<TKey, TValue>
var prices = new Dictionary<string, decimal>();
prices["EUR"] = 1.0m;
prices["USD"] = 1.12m;

decimal eurPrice = prices["EUR"];      // 1.0
bool hasCzk = prices.ContainsKey("CZK");

Kedy použiť Dictionary?
Vždy, keď máš prirodzený kľúč (napr. kód meny, ID používateľa, číslo faktúry) a často podľa neho vyhľadávaš.

Collection<T>

Collection<T> je menej používaná, ale veľmi užitočná trieda z System.Collections.ObjectModel. Je to obal nad inou kolekciou (zvyčajne List<T>), ktorý umožňuje lepšiu kontrolu nad tým, čo sa deje pri pridávaní a odstraňovaní prvkov.

  • Často sa používa, keď chceme poskytnúť „bezpečnejšie API“ nad interným zoznamom.
  • Umožňuje preťažiť metódy ako InsertItem, RemoveItem, SetItem.
  • Vhodné pre doménové modely, kde chceme validovať každý zásah do kolekcie.

public class InvoiceItemCollection : Collection<InvoiceItem>
{
    protected override void InsertItem(int index, InvoiceItem item)
    {
        if (item.Quantity <= 0)
        {
            throw new ArgumentException("Množstvo musí byť väčšie ako 0.");
        }

        base.InsertItem(index, item);
    }
}

// použitie
var items = new InvoiceItemCollection();
items.Add(new InvoiceItem { Quantity = 1, Description = "Služba" });

Collection<T> je ideálna vtedy, keď nechceme vystaviť priamo List<T>, ale potrebujeme mať možnosť reagovať na zmenu obsahu kolekcie.

Porovnanie – čo kedy použiť?

Kolekcia Typický scenár Výhody Nevýhody
List<T> Jednoduchý zoznam položiek, poradie, iterácia. Rýchly index, jednoduché API, najpoužívanejší typ. Pomalé vyhľadávanie podľa hodnoty pri veľkom počte prvkov.
Dictionary<TKey, TValue> Vyhľadávanie podľa kľúča (ID, kód, názov). Veľmi rýchle vyhľadávanie, jedinečné kľúče. Vyšia pamäťová režia, zložitejší typ, poradie nie je garantované.
Collection<T> Doménové kolekcie s vlastnou logikou (validácia, notifikácia). Možnosť preťažiť správanie pri zmene kolekcie. Menej známy typ, často len obal nad List<T>.

Praktické odporúčania

  • Začni vždy s List<T>, ak nepotrebuješ kľúč ani špeciálne správanie.
  • Použi Dictionary<TKey, TValue>, ak často vyhľadávaš podľa jedinečného kľúča.
  • Collection<T> použi v doménovom modeli, keď chceš kontrolovať, čo sa deje pri pridávaní/mazaní položiek.

Dobrá voľba kolekcie vie výrazne zjednodušiť kód, pridať mu čitateľnosť a zároveň zlepšiť výkon aplikácie. Ak staváš doménový model pre reálnu aplikáciu, oplatí sa nad týmto krokom chvíľu premýšľať.

Máte projekt? Prvá konzultácia je zadarmo

Či už máte hotové zadanie alebo len nápad - odpoviem vám do 24 hodín.

Kapacita obmedzená: V danom čase aktívne pracujem maximálne na 2 projektoch súčasne, aby som zachoval vysokú kvalitu.

Napísať Email 📞 Zavolať teraz LinkedIn Profil