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.