A HashSet<T>implementa l' ICollection<T>interfaccia:
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>implementa IList<T>, che estende ilICollection<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; }
}
Un HashSet ha impostato la semantica, implementata internamente tramite una tabella hash:
Un set è una raccolta che non contiene elementi duplicati e i cui elementi non sono in un ordine particolare.
Cosa guadagna HashSet se perde il comportamento dell'indice / posizione / elenco?
L'aggiunta e il recupero di elementi dall'HashSet avviene sempre tramite l'oggetto stesso, non tramite un indicizzatore e vicino a un'operazione O (1) (Elenco è O (1) aggiungi, O (1) recupera per indice, O (n) trova /rimuovere).
Il comportamento di un HashSet può essere paragonato all'utilizzo Dictionary<TKey,TValue>di a semplicemente aggiungendo / rimuovendo le chiavi come valori e ignorando i valori del dizionario stesso. Ci si aspetterebbe che le chiavi di un dizionario non abbiano valori duplicati, e questo è il punto della parte "Imposta".
SortedSetstruttura di dati contraddice ciò che dici sull'ordine di non essere una proprietà di un set, oppure evidenzia un malinteso da parte del team di sviluppo.