A HashSet<T>
implementuje ICollection<T>
interfejs:
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; }
}
A List<T>
narzędzia IList<T>
, która rozszerzaICollection<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 ma ustawioną semantykę, zaimplementowaną wewnętrznie za pomocą tablicy haszującej:
Zestaw to zbiór, który nie zawiera zduplikowanych elementów i którego elementy nie są w określonej kolejności.
Co zyskuje HashSet, jeśli utraci zachowanie indeksu / pozycji / listy?
Dodawanie i pobieranie elementów z HashSet jest zawsze wykonywane przez sam obiekt, a nie przez indeksator i blisko operacji O (1) (lista to O (1) dodawanie, O (1) pobieranie według indeksu, O (n) znajdowanie /usunąć).
Zachowanie HashSet można porównać do używania a Dictionary<TKey,TValue>
, dodając / usuwając klucze jako wartości i ignorując same wartości słownikowe. Można by oczekiwać, że klucze w słowniku nie będą miały zduplikowanych wartości i to jest sedno części „Set”.
SortedSet
strukturę danych albo jest sprzeczny z tym, co mówisz o zamówieniu, które nie jest właściwością zbioru - albo wskazuje na nieporozumienie ze strony zespołu programistów.