A HashSet<T>
implementa la interfaz ICollection<T>
:
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>
implementos IList<T>
, que se extiende la ICollection<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; }
}
A HashSet ha establecido la semántica, implementada a través de una tabla hash internamente:
Un conjunto es una colección que no contiene elementos duplicados, y cuyos elementos son en ningún orden en particular.
¿Qué gana el HashSet, si pierde el comportamiento de índice/posición/lista?
Agregar y recuperar elementos del HashSet es siempre por el objeto mismo, no a través de un indexador, y cerca de una operación O (1) (List es O (1) add, O (1) recuperar por índice, O (n) buscar/eliminar).
El comportamiento de un HashSet podría compararse con el uso de un Dictionary<TKey,TValue>
al solo agregar/eliminar claves como valores e ignorar los valores del diccionario. Es de esperar que las teclas de un diccionario no tengan valores duplicados, y ese es el punto de la parte "Establecer".
El hecho de que el marco proporcione una estructura de datos 'SortedSet' contradice lo que usted dice acerca de que el orden no es una propiedad de un conjunto, o señala un malentendido del equipo de desarrollo. – Veverke
Creo que es más correcto decir que el orden de los elementos en el 'HashSet' no está definido, así que no confíe en el orden del iterador. Si itera el conjunto porque está haciendo algo contra los elementos en el conjunto, es * no * peligroso * a menos que * esté confiando en cualquier cosa relacionada con el orden. Un 'SortedSet' tiene todas las propiedades del orden' HashSet' * plus *, sin embargo 'SortedSet' no se deriva de' HashSet'; reformulado, * un SortedSet es una colección ordenada de objetos distintos *. – Kit
Me gusta esta respuesta mucho. Pero pareces enojado/frustrado/molesto al presentarlo .... que no soy un gran admirador. – pimbrouwers