Pregunta

Me preguntaba si el HashSet<T> .Net se basa por completo en códigos hash o si utilizan la igualdad así?

Tengo una clase particular que pueda potencialmente crear instancias de millones de casos de y hay una posibilidad razonable de que algunos códigos hash chocarán en ese punto.

Estoy considerando utilizar HashSet de almacenar algunos casos de esta clase y estoy preguntando si es realmente vale la pena hacer - si la singularidad de un elemento está determinado únicamente por su código hash entonces eso es de ninguna utilidad para mí para aplicaciones reales

documentación de MSDN parece ser bastante vago sobre este tema - cualquier aclaración sería apreciada

¿Fue útil?

Solución

No, utilizan la igualdad también. Por definición, los códigos hash no necesitan ser único - cualquier cosa que supone que será está roto. HashSet<T> es sensato. Utiliza un IEqualityComparer<T> (por defecto a EqualityComparer<T>.Default ) para llevar a cabo tanto la generación como la igualdad de las pruebas de código hash.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top