framework ejemplo c# hashset

ejemplo - hashset vs list c#



Definir: ¿Qué es un HashSet? (4)

    1. Un HashSet contiene un conjunto de objetos, pero de una manera que le permite determinar fácil y rápidamente si un objeto ya está en el conjunto o no. Lo hace administrando internamente una matriz y almacenando el objeto utilizando un índice que se calcula a partir del código hash del objeto. Mira aqui

    2. HashSet es una colección desordenada que contiene elementos únicos. Tiene las operaciones de recopilación estándar Agregar, Eliminar, Contiene, pero como usa una implementación basada en hash, estas operaciones son O (1). (A diferencia de List, por ejemplo, que es O (n) para Contains y Remove). HashSet también proporciona operaciones de conjuntos estándar como unión , intersección y diferencia simétrica . Mira aqui

  1. Existen diferentes implementaciones de Sets. Algunos hacen que las operaciones de inserción y búsqueda sean súper rápidas mediante elementos hash. Sin embargo, eso significa que el orden en el que se agregaron los elementos se pierde. Otras implementaciones conservan el orden agregado a costa de tiempos de ejecución más lentos.

La clase HashSet en C # va por el primer enfoque, por lo que no conserva el orden de los elementos. Es mucho más rápido que una List regular. Algunos puntos de referencia básicos mostraron que HashSet es decentemente más rápido cuando se trata de tipos primarios (int, double, bool, etc.). Es mucho más rápido cuando se trabaja con objetos de clase. Entonces ese punto es que HashSet es rápido.

La única pega de HashSet es que no hay acceso por índices. Para acceder a los elementos, puede usar un enumerador o la función incorporada para convertir el HashSet en una List e HashSet . Mira aqui

HashSet La estructura de datos C # HashSet se introdujo en .NET Framework 3.5. Puede encontrar una lista completa de los miembros implementados en la página de MSDN de HashSet .

  1. ¿Dónde se usa?
  2. ¿Por qué querrías usarlo?

Desde la perspectiva de la aplicación, si solo necesita evitar los duplicados, entonces HashSet es lo que está buscando, ya que las complejidades de búsqueda, inserción y eliminación son O (1) - constante . Lo que esto significa es que no importa cuántos elementos tenga HashSet tomará la misma cantidad de tiempo para verificar si existe tal elemento o no, y además, al insertar elementos en O (1), también es perfecto para este tipo de cosas.


Un HashSet tiene una estructura interna (hash), donde los elementos se pueden buscar e identificar rápidamente. El inconveniente es que la iteración a través de un HashSet (o la obtención de un elemento por índice) es bastante lenta.

Entonces, ¿por qué alguien querría saber si una entrada ya existe en un conjunto?

Una situación en la que un HashSet es útil es obtener valores distintos de una lista donde pueden existir duplicados. Una vez que se agrega un elemento al HashSet , es rápido determinar si el elemento existe ( Contains operador).

Otras ventajas de HashSet son las operaciones Set: IntersectWith , IsSubsetOf , IsSupersetOf , IsSupersetOf , SymmetricExceptWith , UnionWith .

Si está familiarizado con el lenguaje de restricción de objetos , identificará estas operaciones de conjunto. También verá que está un paso más cerca de una implementación de UML ejecutable.


Simplemente dicho y sin revelar los secretos de la cocina: un conjunto en general, es una colección que no contiene elementos duplicados, y cuyos elementos no están en ningún orden en particular. Por lo tanto, A HashSet<T> es similar a una List<T> genérica List<T> , pero está optimizado para búsquedas rápidas (a través de tablas hash, como su nombre lo indica) al costo de perder el pedido.