Sobes.tech
Junior

Czym jest HashSet w C#?

sobes.tech AI

Odpowiedź od AI

HashSet<T> to nieuporządkowana kolekcja unikalnych elementów. Opiera się na tablicy haszującej i zapewnia szybkie operacje dodawania, usuwania oraz sprawdzania obecności elementów (średnio w czasie stałym, O(1)).

Główne cechy HashSet<T>:

  • Unikalność: Nie może zawierać duplikatów. Próba dodania istniejącego elementu jest ignorowana.
  • Brak uporządkowania: Elementy nie są przechowywane w określonym porządku. Kolejność iteracji może różnić się od kolejności dodania.
  • Wydajność: Dzięki użyciu haszowania operacje wyszukiwania, dodawania i usuwania mają średnio złożoność O(1). W najgorszym przypadku (z powodu złej funkcji haszującej lub kolizji) wydajność może się obniżyć.
  • Wiele operacji: Obsługuje różne operacje, takie jak suma (UnionWith), przecięcie (IntersectWith), różnica (ExceptWith), sprawdzanie podzbioru lub nadzbioru (IsSubsetOf, IsSupersetOf).

Przykład użycia:

// Tworzenie HashSet
HashSet<string> fruits = new HashSet<string>();

// Dodawanie elementów
fruits.Add("jabłko");
fruits.Add("banan");
fruits.Add("pomarańcza");
fruits.Add("jabłko"); // Zignorowane, bo "jabłko" już jest

// Sprawdzanie, czy element istnieje
bool hasBanana = fruits.Contains("banan"); // true
bool hasGrape = fruits.Contains("winogrono"); // false

// Usuwanie elementu
fruits.Remove("pomarańcza");

// Iteracja po elementach
foreach (string fruit in fruits)
{
    // Wyjście: jabłko, banan (kolejność może się różnić)
    Console.WriteLine(fruit);
}

// Liczba elementów
int count = fruits.Count; // 2

HashSet<T> implementuje interfejsy ICollection<T>, IEnumerable<T> i ISet<T>, co pozwala na jego użycie w różnych scenariuszach kolekcji i wykonywanie operacji na zbiorach.