A HashSet<T>
implementiert die ICollection<T>
Schnittstelle:
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; }
}
Ein List<T>
Gerät IList<T>
, das das erweitertICollection<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; }
}
Ein HashSet hat eine Semantik festgelegt, die intern über eine Hashtabelle implementiert wird:
Ein Satz ist eine Sammlung, die keine doppelten Elemente enthält und deren Elemente in keiner bestimmten Reihenfolge vorliegen.
Was gewinnt das HashSet, wenn es das Verhalten von Index / Position / Liste verliert?
Das Hinzufügen und Abrufen von Elementen aus dem HashSet erfolgt immer durch das Objekt selbst, nicht über einen Indexer, und in der Nähe einer O (1) -Operation (Liste ist O (1) hinzufügen, O (1) durch Index abrufen, O (n) finden /entfernen).
Das Verhalten eines HashSets kann mit der Verwendung von a verglichen werden, Dictionary<TKey,TValue>
indem nur Schlüssel als Werte hinzugefügt / entfernt werden und Wörterbuchwerte selbst ignoriert werden. Sie würden erwarten, dass Schlüssel in einem Wörterbuch keine doppelten Werte haben, und das ist der Punkt des Teils "Set".
SortedSet
Datenstruktur bereitstellt, widerspricht entweder Ihrer Aussage, dass Ordnung keine Eigenschaft einer Menge ist - oder weist auf ein Missverständnis des Entwicklungsteams hin.