C# GetHashCode() de Alto Rendimiento Algoritmo de Hash [duplicar]
-
11-12-2019 - |
Pregunta
Posibles Duplicados:
¿Cuál es el mejor algoritmo para anulado Sistema.Objeto.GetHashCode?
Esto es conocido para nosotros que si queremos reemplazar el Equals
método de Object
en nuestros tipos personalizados, también debemos anular y proporcionar una implementación de GetHashCode
método para apoyar la generación de códigos hash únicos para su uso en apoyo de Hashtable
y Dictionary
clases de colección y pueden existir otras clases.
Este mandatos de nuestra implementación del algoritmo de hash se utiliza dentro de nuestro overriden
GetHashCode
el método es óptimo y preciso es decir,se genera un hash único del tipo y de la que también hace que tan pronto como sea posible para mejorar el rendimiento de la aplicación que utiliza nuestro tipo.
Mi pregunta es los algoritmos de hash son precisos y dar un rendimiento óptimo cuando se utiliza en GetHashCode
la aplicación?O, si sólo utilizamos la base del tipo de GetHashCode
la aplicación?Me gustaría saber la respuesta para ambos value types
y reference types
..
Editar:He aquí un ejemplo de una clase de abajo de ¿por qué yo tendría que reemplazar Equals
:
public class Laptop : LaptopBase
{
public readonly string Make;
public readonly string ProcessorArch;
public readonly int MemorySupported;
public readonly int HardDiskGBSupported;
public readonly Color ColorName;
public Laptop(make, procArch, memorySupp, hdGB, color)
{
Make = make;
ProcessorArch = procArch;
MemorySupported = memorySupp;
HardDiskGBSupported = hdGB;
ColorName = color;
}
}
Ahora, quiero devolver true para 2 Laptop instancias que tienen todos los definidos anteriormente, los campos coincidentes entre sí, de modo que se requiere para reemplazar la Equals
y GetHashCode
método y también otro requisito como se puede ver es que esta es una clase derivada y se pueden volver a utilizar más y el apoyo de un número de métodos;y por lo tanto, no se puede hacer un tipo de valor (struct).He probado con 2 instancias de arriba escriba con la coincidencia de todos los campos de instancia y si yo uso la base de la aplicación de Equals
- regresa false
donde yo quiero estar true
..
¿Cómo puedo apoyar a un escenario?
Solución
Depende de el tipo que se aplica, pero debe darle una buena dispersión de los valores, y NO es una necesidad para GetHashCode() para devolver una única valores.Se debe basar en los campos que se utilizan en la es Igual a la implementación y los campos deben ser inmutables.Así los requisitos de Iguala/GetHashCode son los mismos para las estructuras y clases.
Y como dijo Henk, es mejor no Equivale a anular/GetHashCode en todos los...