¿Por qué dos objetos iguales deben tener el mismo valor hash?

Referencia del protocolo NSObject dice "Si dos objetos son iguales, ellos debe: tienen el mismo valor hash".

¿Porque debe? ¿Cuál podría ser el problema con dos objetos iguales que no tienen el mismo valor hash?

preguntado el 22 de mayo de 12 a las 16:05

No creo que entiendas lo que es un hash. -

2 Respuestas

Entonces, básicamente, no podría buscar valores iguales en una tabla hash. Los códigos hash se utilizan básicamente como una forma rápida de encontrar posible coincidencias clave dentro de una tabla hash (o conjunto hash). Eso se basa en el contrato "la igualdad de objetos implica la igualdad de hash".

Si no planea usar sus objetos dentro cualquier cosa que usa hashing para una búsqueda rápida, es posible que se salga con la suya teniendo objetos iguales que devuelvan códigos hash diferentes, pero realmente lo evitaría si puede.

contestado el 22 de mayo de 12 a las 16:05

Entonces, no es realmente un debe:? Los métodos similares deberían devolver objetos retenidos si los métodos solo comienzan con "init", "nuevo" o "copiar" (pero no es necesario). Es lo que se espera de mi clase. - Aleksa

@Aleksa: Es tanto como debe: como cualquier otra cosa en el mundo. Un método hash que no produce el mismo hash para objetos considerados iguales es inútil e incorrecto. Es una función hash condición sine qua non. - Arrojar

@Chuck: Por otro lado, si no se va a usar el método hash, no dañará nada... pero eso es un gran "si" y una pesadilla de mantenimiento que está por suceder, por supuesto :) - jon skeet

Y no sabe si se usará o no, no sabe cómo se implementan los grupos de liberación automática, no sabe que KVO no lo está haciendo girar detrás de escena, etc. jeff laing

Aquí hay una descripción simplificada de cómo funciona una tabla hash. NSSet es una tabla hash.

La estructura básica

Asigne un NSArray de N NSMutableArrays. Llamemos a la matriz externa "tabla" y a las internas "listas". Esta estructura es nuestra tabla hash.

Cómo funciona la inserción

Para insertar un objeto, llame a 'hash' en él. Esto nos da un número. Trunca el número para que esté entre 0 y (N - 1). Trate ese resultado como un índice en la tabla. Vaya a la matriz mutable en esa ranura (lista) y vea si el 'objeto' ya está en la lista, si no, agréguelo. Si es así, nada que hacer.

Cómo funciona la búsqueda

Para ver si un valor está en la tabla hash, llame a hash en él. Esto nos da un número. Trunca el número para que esté entre 0 y (N - 1). Trate ese resultado como un índice en la tabla. Vaya a la matriz mutable en esa ranura (lista) y vea si el 'objeto' ya está en la lista. Si está allí, la tabla contiene el objeto; de lo contrario, no lo contiene.


¿Por qué los objetos iguales tienen que tener valores hash iguales?

El código hash se usa para encontrar qué lista buscar. Si dos objetos son conceptualmente iguales pero tienen diferentes valores hash, entonces cuando vayamos a buscar arriba en la tabla exterior no encontraremos el objeto en la lista esperada ya que nuestros objetos se resolverán en dos listas diferentes.

Respondido 18 Jul 16, 09:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.