Sobes.tech
Junior
112
questionbank

Что такое HashSet в C#?

Answer from AI

sobes.tech AI

HashSet<T> — это неупорядоченная коллекция уникальных элементов. Она основана на хэш-таблице и обеспечивает быстрые операции добавления, удаления и проверки наличия элементов (в среднем за константное время, O(1)).

Основные характеристики HashSet<T>:

  • Уникальность: Не может содержать дубликаты. При попытке добавить существующий элемент, операция игнорируется.
  • Неупорядоченность: Элементы не хранятся в каком-либо определенном порядке. Порядок перебора может отличаться от порядка добавления.
  • Производительность: Благодаря использованию хэширования, операции поиска, добавления и удаления в среднем имеют сложность O(1). В худшем случае (при плохом хэш-функционировании или коллизиях) производительность может снижаться.
  • Множественные операции: Поддерживает множество операций, таких как объединение (UnionWith), пересечение (IntersectWith), разность (ExceptWith), проверка подмножества или надмножества (IsSubsetOf, IsSupersetOf).

Пример использования:

// Создание HashSet
HashSet<string> fruits = new HashSet<string>();

// Добавление элементов
fruits.Add("apple");
fruits.Add("banana");
fruits.Add("orange");
fruits.Add("apple"); // Будет проигнорировано, так как "apple" уже есть

// Проверка наличия элемента
bool hasBanana = fruits.Contains("banana"); // true
bool hasGrape = fruits.Contains("grape");   // false

// Удаление элемента
fruits.Remove("orange");

// Перебор элементов
foreach (string fruit in fruits)
{
    // Вывод: apple, banana (порядок может варьироваться)
    Console.WriteLine(fruit);
}

// Размер коллекции
int count = fruits.Count; // 2

HashSet<T> реализует интерфейсы ICollection<T>, IEnumerable<T> и ISet<T>, что позволяет использовать его в различных сценариях коллекций и выполнять специфичные для множеств операции.