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".
SortedSet
struttura 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.