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) (Список є O (1) додати, O (1) отримувати за індексом, O (n) знаходити / видалити).
Поведінку HashSet можна порівняти із використанням Dictionary<TKey,TValue>
лише додавання / видалення ключів як значень та ігнорування самих значень словника. Ви очікуєте, що ключі в словнику не мають повторюваних значень, і в цьому справа частини "Встановити".
SortedSet
структуру даних, або суперечить тому, що ви говорите про те, щоб замовлення не було властивістю набору, - або вказує на непорозуміння з боку команди розробників.