A HashSet<T>
implémente l' 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; }
}
Un List<T>
outil IList<T>
, qui prolonge laICollection<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 a défini une sémantique, implémentée via une table de hachage en interne:
Un ensemble est une collection qui ne contient aucun élément en double et dont les éléments ne sont pas dans un ordre particulier.
Que gagne le HashSet s'il perd son comportement d'index / position / liste?
L'ajout et la récupération d'éléments à partir du HashSet se font toujours par l'objet lui-même, pas via un indexeur, et à proximité d'une opération O (1) (List is O (1) add, O (1) retrieve by index, O (n) find /retirer).
Le comportement d'un HashSet pourrait être comparé à l'utilisation de a Dictionary<TKey,TValue>
en ajoutant / supprimant uniquement des clés en tant que valeurs et en ignorant les valeurs du dictionnaire elles-mêmes. Vous vous attendriez à ce que les clés d'un dictionnaire n'aient pas de valeurs en double, et c'est le but de la partie "Set".
SortedSet
structure de données contredit ce que vous dites sur l'ordre n'étant pas une propriété d'un ensemble - ou indique un malentendu de l'équipe de développement.