2010-03-16 9 views
12

Me preguntaba si .Net HashSet<T> se basa completamente en códigos hash o si también utiliza la igualdad?¿El cálculo de unicidad HashSet de .Net está completamente basado en Códigos Hash?

Tengo una clase particular en la que posiblemente pueda crear instancias de millones de instancias y hay una posibilidad razonable de que algunos códigos hash colisionen en ese punto.

Estoy considerando utilizar HashSet para almacenar algunas instancias de esta clase y me pregunto si realmente vale la pena hacerlo; si la singularidad de un elemento solo está determinada en su código hash, entonces eso no me sirve para aplicaciones reales

La documentación de MSDN parece ser bastante vaga sobre este tema; cualquier aclaración sería apreciada

Respuesta

14

No, también usa la igualdad. Por definición, los códigos hash no necesitan ser únicos, cualquier cosa que asuma que estará rota. HashSet<T> es sensato. Utiliza un IEqualityComparer<T> (valor predeterminado: EqualityComparer<T>.Default) para realizar pruebas de igualdad y generación de código hash.

+1

Genial - eso es exactamente lo que esperaba que hiciera - MSDN simplemente no lo deja en claro en la documentación – RobV

Cuestiones relacionadas