Skip to content

Zadanie 31

Czym są kolekcje dostępne w C#, podać dwa przykłady korzystania z dostępnych kolekcji

Kolekcje to klasy służące do przechowywania i zarządzania grupami obiektów. W odróżnieniu od tablic mają zmienny rozmiar (mogą rosnąć i maleć w trakcie działania programu) oraz dostarczają gotowych metod do dodawania, usuwania i wyszukiwania elementów.

Kolekcje dzielą się na dwie grupy:

  • niegeneryczne (System.Collections) - trzymają elementy jako object.
  • generyczne (System.Collections.Generic) - typowane (konkretny typ T), przez co bezpieczniejsze i wydajniejsze.

Dziś używa się prawie wyłącznie generycznych.

Wszystkie kolekcje opierają się na wspólnych interfejsach: IEnumerable (umożliwia foreach), ICollection (dodaje Count, Add, Remove), IList (dostęp po indeksie) oraz IDictionary (dostęp po kluczu).

Do najpopularniejszych kolekcji generycznych należą:

  • List<T> - dynamiczna lista indeksowana.
  • Dictionary<TKey, TValue> - pary klucz-wartość, szybki dostęp po kluczu.
  • Queue<T> - kolejka FIFO (pierwszy wszedł, pierwszy wychodzi).
  • Stack<T> - stos LIFO (ostatni wszedł, pierwszy wychodzi).
  • HashSet<T> - zbiór unikalnych elementów (bez duplikatów).
using System.Collections.Generic;
// List<T> - dynamiczna lista elementów tego samego typu
List<string> names = new List<string>();
// dodanie elementów na koniec listy
names.Add("Ala");
names.Add("Ola");
// odczyt po indeksie
Console.WriteLine(names[0]);
// usuwanie i sprawdzanie zawartości
names.Remove("Ala");
bool hasOla = names.Contains("Ola");
// Dictionary<TKey, TValue> - kolekcja par klucz-wartość
Dictionary<string, int> ages = new Dictionary<string, int>();
// dodanie pary klucz-wartość
ages["Ala"] = 20;
ages.Add("Ola", 25);
// odczyt wartości po kluczu
Console.WriteLine(ages["Ala"]);
// bezpieczny odczyt, gdy klucz może nie istnieć
if (ages.TryGetValue("Ola", out int age))
Console.WriteLine(age);

Skrót do zapamiętania: Kolekcje to klasy do przechowywania grup obiektów o zmiennym rozmiarze. Generyczne (System.Collections.Generic) są typowane i wydajne, niegeneryczne (System.Collections) trzymają object. Przykłady: List (lista), Dictionary (klucz-wartość), Queue (FIFO), Stack (LIFO), HashSet (unikalne).

  • Zmienny rozmiar i gotowe metody (Add, Remove, Contains).
  • Niegeneryczne (System.Collections, object) vs generyczne (System.Collections.Generic, typowane).
  • Interfejsy: IEnumerable (foreach), ICollection, IList, IDictionary.
  • Przykłady użycia: List<T> (lista indeksowana), Dictionary<TKey,TValue> (pary klucz-wartość).