Noto que existe una getHashCode() método en todos los controles, los elementos, en WP7, que devuelva una secuencia de número. Puedo usar esta etiqueta para identificar un elemento? Por ejemplo yo quiero para identificar una imagen o una canción en el dispositivo, y comprobar que whereabout. Esto se podría hacer si la etiqueta dada por los elementos específicos es único.

Puede ayudar a explicar para mí lo que es hashCode y getHashCode() utilizar para?

  • Yo sé lo que es hashCode decir, intento ejecutar mi código muchas veces para obtener la etiqueta y volver por el mismo hashcode para la sameitems cada vez y no parece ser duplicado, pero no estoy muy seguro. Bueno, está bien si quieres downvote, es tu opinión. Gracias por la edición de todos modos!
  • Recomiendo la lectura de Eric Lippert del las Directrices y normas para GetHashCode , a pesar de que se centra en las normas de aplicación de HashCodes más que de normas para el uso de ellos…, ya que «son por diseño útil para hacer sólo una cosa: poner un objeto en una tabla hash»
InformationsquelleAutor Nghia Nguyen | 2011-09-15

5 Comentarios

  1. 99

    MSDN dice:

    Un código hash es un valor numérico que se utiliza para identificar un objeto
    durante la igualdad de ensayo. También puede servir como un índice para un objeto
    en una colección.

    El método GetHashCode es adecuado para su uso en algoritmos de hash y
    las estructuras de datos como una tabla hash.

    La implementación predeterminada del método GetHashCode no
    garantía única de los valores de retorno para diferentes objetos. Además, el
    .NET Framework no garantiza la implementación predeterminada de la
    Método GetHashCode, y el valor que devuelve será el mismo entre
    diferentes versiones de la .NET Framework. En consecuencia, el valor predeterminado
    la aplicación de este método no debe ser utilizado como un objeto único
    identificador para la mezcla fines.

    El método GetHashCode puede ser reemplazado por un tipo derivado. Valor
    los tipos deben invalidar este método para proporcionar una función hash que es
    adecuada para ese tipo y para proporcionar una distribución útil en un
    de la tabla hash. La unicidad, el código hash debe estar basada en el valor
    de una instancia de campo o propiedad en lugar de un campo estático o
    propiedad.

    Objetos se utiliza como una clave en un objeto Hashtable también deben reemplazar el
    Método GetHashCode porque los objetos se deben generar su propio hash
    código. Si un objeto se utiliza como una clave no proporciona un útil
    implementación de GetHashCode, puede especificar un proveedor de código hash
    cuando el objeto Hashtable es construido. Antes de la .NET Framework
    la versión 2.0, el proveedor de código hash se basa en la
    Sistema.Las colecciones.IHashCodeProvider de la interfaz. A partir de la versión
    2.0, el código hash proveedor se basa en la
    Sistema.Las colecciones.Interfaz de IEqualityComparer.

    Básicamente, hash existen códigos para hacer tablas de hash posible.

    Dos objetos iguales tienen garantizada la igualdad de hashcodes.

    Dos desigual objetos son no garantizado para tener desigual hashcodes (que se llama una colisión).

    • La cita de la MSDN está ahora fuera de la fecha. La MSDN ahora no es tan explícita sobre el código hash de no ser única.
  2. 214

    Después de aprender lo es todo, pensé en escribir una suerte sencilla explicación a través de la analogía:

    Pensar en un Hashcode como nosotros, tratando de Identificar De forma Única a Alguien

    Soy un detective, en la búsqueda de un criminal. Deje que nosotros le llaman Mr Cruel. (Él era un notorio asesino cuando yo era un niño — irrumpió en una casa secuestrado y asesinado a una pobre muchacha, tirado a su cuerpo y él todavía está hacia fuera en la suelta, pero eso es un asunto separado). Mr Cruel tiene ciertas características peculiares que puedo utilizar para identificar de forma única a él entre un mar de gente. Tenemos 25 millones de personas en Australia. Uno de ellos es Mr Cruel. ¿Cómo podemos encontrarlo?

    Malas maneras de Identificar el Señor Cruel

    Al parecer Mr Cruel tiene los ojos azules. Que no es mucha ayuda, ya que casi la mitad de la población en Australia también tiene los ojos azules.

    Buenas maneras de Identificar el Señor Cruel

    ¿Qué otra cosa puedo usar? Yo sé: voy a utilizar una huella dactilar!

    Ventajas:

    • Es muy, muy difícil que dos personas tengan el mismo dedo de impresión (no imposible, pero muy poco probable).
    • Mr Cruel de huellas nunca va a cambiar.
    • Cada parte de Mr Cruel del ser entero: su aspecto, color de cabello, personalidad, hábitos de alimentación, etc debe (idealmente) se refleja en su huella, de tal manera que si él tiene un hermano (que es muy parecido pero no el mismo), entonces tanto la debe han diferentes huellas de dedos. Digo «debería» porque no podemos garantizar al 100% que dos personas en este mundo tienen diferentes huellas dactilares.
    • Pero siempre podemos garantizar que el Señor Cruel siempre tendrá el mismo dedo de la impresión – y que su huella NUNCA va a cambiar.

    Las características anteriores hacen generalmente para el bien de las funciones de hash.

    Así que ¿cuál es el trato con los ‘Choques’?

    Así que imagino que si me de plomo, y me encuentro con alguien de coincidencia de Mr Cruel huellas digitales. ¿Significa esto que he encontrado Mr Cruel?

    ……..tal vez! Tengo que tomar una mirada más cercana. Si estoy usando SHA256 (una función hash) y estoy buscando en una ciudad pequeña con sólo 5 personas – a continuación, hay una muy buena probabilidad de que lo encontré! Pero si estoy usando MD5 (otro famoso función de hashing) y la comprobación de huellas dactilares en una ciudad con +2^1000 personas, entonces es una buena posibilidad de que dos completamente diferentes personas pueden tener la misma huella dactilar.

    Entonces, ¿cuál es el beneficio de todo esto de todos modos?

    El único beneficio real de hashcodes es que si quieres poner algo en una tabla hash – y con tablas hash que te gustaría encontrar objetos rápidamente y es allí donde el código hash que viene. Que le permiten encontrar las cosas en tablas de hash de una manera realmente rápida. Es un hack que masivamente se mejora el rendimiento, pero a un gasto pequeño de precisión.

    Así que vamos a imaginar que tenemos una tabla hash lleno de gente – de 25 millones de sospechosos en Australia. Mr Cruel es en algún lugar de ahí….. ¿Cómo podemos saber lo que realmente rápidamente? Tenemos que ordenar a través de todos ellos: para encontrar una coincidencia potencial, o para absolver a los posibles sospechosos. Usted no desee considerar características únicas en cada persona, porque eso llevaría demasiado tiempo. ¿Qué te gustaría utilizar en su lugar? Tendría que utilizar un código hash! Una etiqueta puede decir si dos personas son diferentes. Si Joe Bloggs NO es Mr Cruel. Si las impresiones no coinciden, usted sabe que es definitivamente NO Señor Cruel. Pero, si el dedo se imprime hacer coincidir, a continuación, dependiendo de la función de hash que se utiliza, las posibilidades son bastante buenas que usted los encontró a su hombre. Pero no es el 100%. La única manera de estar seguro es investigar más a fondo: (i) hizo que él/ella tiene una oportunidad el motivo o, (ii) los testigos, etc, etc.

    Cuando se utilicen equipos si dos objetos tienen el mismo valor de código hash, entonces de nuevo la necesidad de investigar más a fondo si realmente son iguales. por ejemplo, habría Que revisar si los objetos tienen, por ejemplo la misma altura, con el mismo peso, etc, si los enteros son el mismo, o si el customer_id es un partido, y, a continuación, llegar a la conclusión de si son el mismo. normalmente, esto se hace tal vez por la aplicación de un IComparer o IEquality interfaces.

    Clave Resumen

    Así que, básicamente un código hash es una impresión del dedo.

    ¿Qué es la etiqueta para que sirve? Es único?

    1. Dos diferentes personas/objetos pueden, en teoría, todavía tienen el mismo
      de huellas dactilares. O en otras palabras. Si usted tiene dos huellas dactilares iguales………entonces no es necesario que ambos proceden de la misma persona/objeto.
    2. Buuuuuut, el misma persona/objeto siempre devolverá el
      mismo huellas dactilares.
    3. Que significa que si dos objetos de retorno diferentes códigos hash, a continuación, usted sabe que para el 100% de certeza de que los objetos son diferentes.

    Se necesita un buen 3 minutos para conseguir su cabeza alrededor de los de arriba. Tal vez leer un par de veces hasta tiene sentido. Espero que esto ayude a alguien, porque se trata de una gran cantidad de dolor para mí para aprender todo!

    • Usted Señor. merecen más upvotes
    • Usted es un profesor nativo. Muy, muy claro para mí. Gracias.
    • Re: La documentación de MSDN mató a algunos de mis células del cerebro ….llevó bastante a algunos de los míos al borde del suicidio. guardan sólo porque me quedé dormido 😉
    • Qué terrible historia como ejemplo…
    • Has destruido todo su agradable explicación con asterisco comentario al final.
    • Yo pensaba que las huellas dactilares son únicas
    • Me encantó! principalmente el nombre de «el Señor Cruel!

  3. 11

    GetHashCode() se utiliza para ayudar a apoyar utiliza el objeto como una clave para tablas de hash. (Algo similar existe en Java, etc). El objetivo es que cada objeto para volver distintas código hash, pero a menudo esto no puede ser absolutamente garantizado. Es requiere a pesar de que lógicamente dos objetos iguales devolver el mismo código hash.

    Una típica tabla de hash de ejecución comienza con la etiqueta de valor, toma un módulo (lo cual limita el valor dentro de un rango) y se utiliza como un índice de un array de «cubos».

  4. 8

    No es exclusivo de WP7–está presente en todos .Neto de los objetos. De alguna manera hace que lo que usted describe, pero yo no lo recomendaría como un identificador único en sus aplicaciones, ya que no se garantiza que sea único.

    Objeto.Método GetHashCode

  5. 4

    Esto es desde el artículo de msdn aquí:

    https://blogs.msdn.microsoft.com/tomarcher/2006/05/10/are-hash-codes-unique/

    «Mientras usted va a escuchar a la gente del estado que los códigos hash de generar un valor único para una entrada dada, el hecho es que, aunque difícil de lograr, es técnicamente posible encontrar dos diferentes entradas de datos que hash para el mismo valor de. Sin embargo, los verdaderos factores determinantes en cuanto a la efectividad de un algoritmo de hash de la mentira en la longitud de generar el código hash y la complejidad de los datos que se cifran.»

    Tan sólo utilizar un algoritmo de hash adecuado para el tamaño de los datos y tendrá único hashcodes.

Dejar respuesta

Please enter your comment!
Please enter your name here