A HashSet<T>
реализует ICollection<T>
интерфейс:
public interface ICollection<T> : IEnumerable<T>, IEnumerable
{
// Methods
void Add(T item);
void Clear();
bool Contains(T item);
void CopyTo(T[] array, int arrayIndex);
bool Remove(T item);
// Properties
int Count { get; }
bool IsReadOnly { get; }
}
А List<T>
орудия IList<T>
, который расширяетICollection<T>
public interface IList<T> : ICollection<T>
{
// Methods
int IndexOf(T item);
void Insert(int index, T item);
void RemoveAt(int index);
// Properties
T this[int index] { get; set; }
}
У HashSet есть заданная семантика, внутренне реализованная через хэш-таблицу:
Набор - это коллекция, которая не содержит повторяющихся элементов и элементы которой не расположены в определенном порядке.
Что получает HashSet, если он теряет поведение индекса / позиции / списка?
Добавление и извлечение элементов из HashSet всегда осуществляется самим объектом, а не с помощью индексатора, и близко к операции O (1) (List - O (1) add, O (1) - по индексу, O (n) - по поиску). /удалять).
Поведение HashSet можно сравнить с использованием Dictionary<TKey,TValue>
только добавления / удаления ключей как значений и игнорирования самих значений словаря. Вы могли бы ожидать, что ключи в словаре не будут иметь повторяющихся значений, и в этом суть части «Установить».
SortedSet
структуру данных, либо противоречит тому, что вы говорите о порядке, а не свойстве набора, либо указывает на недопонимание со стороны команды разработчиков.