Поделиться через


Класс System.Collections.Generic.HashSet<T>

В этой статье приводятся дополнительные замечания к справочной документации по этому API.

Класс HashSet<T> предоставляет высокопроизводительные операции набора. Набор представляет собой коллекцию, которая не содержит повторяющихся элементов и элементы которых не имеют определенного порядка.

Емкость HashSet<T> объекта — это количество элементов, которые может хранить объект. HashSet<T> Емкость объекта автоматически увеличивается по мере добавления элементов в объект.

Класс HashSet<T> основан на модели математических наборов и обеспечивает высокопроизводительные операции, аналогичные доступу к ключам Dictionary<TKey,TValue> или Hashtable коллекциям. В простых терминах HashSet<T> класс можно рассматривать как коллекцию без значений Dictionary<TKey,TValue> .

Коллекция HashSet<T> не отсортирована и не может содержать повторяющиеся элементы. Если порядок или дублирование элементов более важно, чем производительность приложения, рассмотрите возможность использования List<T> класса вместе с методом Sort .

HashSet<T> предоставляет множество математических операций, таких как добавление (объединения) и вычитание. В следующей таблице перечислены предоставленные HashSet<T> операции и их математические эквиваленты.

Операция HashSet Математический эквивалент
UnionWith Объединение или добавление набора
IntersectWith Пересечения
ExceptWith Установка вычитания
SymmetricExceptWith Симметричное различие

Помимо перечисленных операций HashSet<T> набора класс также предоставляет методы для определения равенства наборов, перекрытия наборов и того, является ли набор подмножеством или супермножеством другого набора.

платформа .NET Framework только: Для очень крупных HashSet<T> объектов можно увеличить максимальную емкость до 2 миллиардов элементов в 64-разрядной системе, задав enabled атрибут <gcAllowVeryLargeObjects> элемента true конфигурации в среде выполнения.

Класс HashSet<T> реализует интерфейс ISet<T>.

Операции хэшSet и набора LINQ

LINQ предоставляет доступ к Distinctоперациям , UnionIntersectа также Except устанавливает операции с любым источником данных, реализующим IEnumerable интерфейсы или IQueryable интерфейсы. HashSet<T> предоставляет большую и более надежную коллекцию операций набора. Например, предоставляет такие сравнения, HashSet<T> как IsSubsetOf и IsSupersetOf.

Основное различие между операциями набора LINQ и HashSet<T> операциями заключается в том, что операции набора LINQ всегда возвращают новую IEnumerable<T> коллекцию, а HashSet<T> эквивалентные методы изменяют текущую коллекцию.

Как правило, если необходимо создать новый набор или если приложению требуется доступ только к предоставленным операциям набора, использование операций набора LINQ для любой IEnumerable<T> коллекции или массива будет достаточно. Тем не менее, если приложению требуется доступ к дополнительным операциям набора или если не желательно или необходимо создать новую коллекцию, используйте HashSet<T> класс.

В следующей HashSet<T> таблице показаны операции и их эквивалентные операции набора LINQ.

Операция HashSet Эквивалент LINQ
UnionWith Union
IntersectWith Intersect
ExceptWith Except
Не предоставлено. Distinct
SymmetricExceptWith Не предоставлено.
Overlaps Не предоставлено.
IsSubsetOf Не предоставлено.
IsProperSubsetOf Не предоставлено.
IsSupersetOf Не предоставлено.
IsProperSupersetOf Не предоставлено.
SetEquals Не предоставлено.