Recientemente me han entrenado en un par de entrevistas sobre Hashtables y cuándo es necesario anular el GetHashCode(). La discusión siguió profundizándose hasta que tiré la toalla.Preguntas de la entrevista relacionadas con Hashtable y el diccionario
Ahora estoy haciendo una investigación para cubrir todo para estar listo para la próxima vez.
He encontrado este excelente artículo que me gustaría compartir: http://msdn.microsoft.com/en-us/library/ms379571(VS.80).aspx#datastructures20_2_topic5
1) Algo que no me siento muy cómodo con * son el hecho de que los diccionarios se basan Hash, pero las listas no son aparentemente . ¿Eso solo significa que la búsqueda en una lista <> y matriz [] es lineal, mientras que la búsqueda en un diccionario o hashtable es constante y, por lo tanto, mucho más rápida? ¿Esto es todo?
2) Si utilizo una clase como clave en un diccionario, debo anular GetHashcode() en esa clase en función de los campos de identificación necesarios para que las instancias sean únicas. Sin embargo, todavía podría suceder que ambos campos ID sean iguales y se genere el mismo código hash. Si este es el caso, ¿qué sucede durante una colisión de las dos instancias con el mismo código hash?
3) ¿Cómo se puede resolver la colisión? Leí en el artículo sobre la metodología de reajuste en caso de colisión para Hashtable y encadenamiento para el diccionario. Pero todavía no estoy seguro de cómo funciona exactamente, ya que no soy un genio de las matemáticas. : - \ ¿Alguien puede explicar mejor cómo funciona?
Muchas gracias, Kave
Si se genera el mismo código hash la función igual se ejecuta en el objeto para determinar la igualdad. Por lo tanto, no se olvide de anular esa función también. – Magnus
Solo quería agradecer a todos los que contribuyeron. Tuve una entrevista y me pidieron HashSet lol. De una sola vez, le di todos los pro/contras de hash como discutimos y quedó impresionado. Pasó la entrevista. Entonces debe ser correcto. ;) – Houman