Класс 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
операциям , Union
Intersect
а также 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 | Не предоставлено. |