Saltar al contenido

¿Qué es exactamente la colisión de hash?

Queremos compartirte la mejor información que hemos encontrado en internet. Nosotros queremos que te sirva de ayuda y si quieres aportar alguna mejora hazlo libremente.

Solución:

¿Qué es exactamente Hash Collision? ¿Es una característica o un fenómeno común que se hace por error pero que es bueno evitar?

Es una característica. Surge de la naturaleza de un hashCode: un mapeo de un espacio de gran valor a un espacio de valor mucho más pequeño. Habrá colisiones, por diseño e intención.

Qué causa exactamente Hash Collision: la mala definición del método hashCode () de la clase personalizada,

Un mal diseño puede empeorarlo, pero es endémico en la noción.

O para dejar el método equals() sin anular mientras se anula imperfectamente el método hashCode() solo,

No.

¿O no depende de los desarrolladores y muchas bibliotecas java populares también tienen clases que pueden causar Hash Collision?

Esto realmente no tiene sentido. Los hashes están destinados a colisionar tarde o temprano, y los algoritmos deficientes pueden hacerlo antes. Eso es todo.

¿Algo sale mal o es inesperado cuando ocurre Hash Collision?

No si la tabla hash está escrita de manera competente. Una colisión hash solo significa que el hashCode no es único, lo que lo lleva a llamar equals()y cuantos más duplicados haya, peor será el rendimiento.

Quiero decir, ¿hay alguna razón por la que debamos evitar Hash Collision?

Tienes que negociar la facilidad de cálculo contra la dispersión de valores. No hay una única respuesta en blanco y negro.

¿Java genera o al menos intenta generar hasCode único por clase durante la iniciación del objeto?

No. El ‘código hash único’ es una contradicción en los términos.

Si no, ¿es correcto confiar solo en Java para garantizar que mi programa no se ejecute en Hash Collision para las clases JRE? Si no está bien, entonces cómo evitar la colisión de hash para hashmaps con clases finales como String as key?

La pregunta no tiene sentido. si estás usando String no tiene ninguna opción sobre el algoritmo hash, y también está utilizando una clase cuyo hashCode ha sido esclavizado por expertos durante veinte años o más.

En realidad, creo que la colisión hash es Normal. Vamos a hablar de un caso para pensar. Tenemos 1000000 números grandes (el conjunto S de x), digamos que x está en 2^64. Y ahora queremos hacer un mapa para este conjunto de números. vamos a mapear este conjunto de números S a [0,1000000] .

¿Pero cómo? usa hachís!!

Defina una función hash f(x) = x mod 1000000. Y ahora la x en S se convertirá en[01000000)OKperoencontraráquemuchosnúmerosenSseconvertiránenunsolonúmeroporejemploelnúmerok*1000000+yestarátodoubicadoenyqueporque(k*1000000+y)%x=yAsíqueestaesunacolisiónhash[01000000)OKButyouwillfindthatmanynumbersinSwillconvertintoonenumberforexamplethenumberk*1000000+ywillallbelocatedinywhichbecause(k*1000000+y)%x=ySothisisahashcollision

¿Y cómo lidiar con la colisión? En este caso del que hablábamos anteriormente, es muy difícil delimitar la colisión porque la computación matemática tiene alguna posibilidad. Podemos encontrar una función hash más compleja y más buena, pero definitivamente no podemos decir que eliminamos la colisión. Deberíamos hacer nuestro esfuerzo para encontrar una función hash más buena para disminuir la colisión hash. Debido a que la colisión de hash aumenta el costo de tiempo que usamos hash para encontrar algo.

Simplemente, hay dos formas de lidiar con la colisión de hash. la lista vinculada es una forma más directa, por ejemplo: si dos números anteriores obtienen el mismo valor después de la función hash, creamos una lista vinculada a partir de este cubo de valores, y todos los mismos valores se colocan en la lista vinculada del valor. Y otra forma es simplemente encontrar una nueva posición para el número posterior. por ejemplo, si el número 1000005 ha tomado la posición en 5 y cuando 2000005 obtiene el valor 5, no se puede ubicar en la posición 5, luego continúa y encuentra una posición vacía para tomar.

Para la última pregunta: ¿Java genera o al menos intenta generar un hashCode único por clase durante la iniciación del objeto?

el código hash de Object normalmente se implementa convirtiendo la dirección interna del objeto en un número entero. Por lo tanto, puede pensar que diferentes objetos tienen un código hash diferente, si usa el código hash() del objeto.

Calificaciones y reseñas

Si haces scroll puedes encontrar las notas de otros gestores de proyectos, tú aún puedes mostrar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *