A HashSet<T>
implementa a ICollection<T>
interface:
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; }
}
Um List<T>
implementa IList<T>
, que estende oICollection<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; }
}
Um HashSet definiu semântica, implementada através de uma hashtable internamente:
Um conjunto é uma coleção que não contém elementos duplicados e cujos elementos não estão em uma ordem específica.
O que o HashSet ganha se perder o comportamento do índice / posição / lista?
Adicionar e recuperar itens do HashSet é sempre do próprio objeto, não por meio de um indexador e próximo a uma operação O (1) (Lista é O (1) add, O (1) recupera por índice, O (n) encontra /remover).
O comportamento de um HashSet pode ser comparado ao uso de um Dictionary<TKey,TValue>
adicionando / removendo apenas chaves como valores e ignorando os próprios valores do dicionário. Você esperaria que as chaves de um dicionário não tivessem valores duplicados, e esse é o ponto da parte "Definir".
SortedSet
estrutura de dados contradiz o que você diz sobre a ordem não ser propriedade de um conjunto - ou aponta para um mal-entendido da equipe de desenvolvimento.