metodo - ¿Cuál es el uso de hashcode en Java?
java hashcode vulnerability (7)
El valor devuelto por
hashCode()
es el código hash del objeto, que es la dirección de memoria del objeto en hexadecimal.Por definición, si dos objetos son iguales, su código hash también debe ser igual. Si anula el método
equals()
, cambia la forma en que se equiparan dos objetos y la implementación dehashCode()
dehashCode()
ya no es válida. Por lo tanto, si anula el método equals (), también debe anular el métodohashCode()
.
Esta respuesta es de la documentación del tutorial oficial java SE 8
En Java obj.hashcode()
devuelve algún valor. ¿Cuál es el uso de este código hash en la programación?
Aunque hashcode no tiene nada que ver con su lógica comercial, tenemos que encargarnos de ello en la mayoría de los casos. Porque cuando el objeto se coloca en un contenedor basado en hash (HashSet, HashMap ...), el contenedor pone / obtiene el código hash del elemento.
Desde el Javadoc :
Devuelve un valor de código hash para el objeto. Este método es compatible con el beneficio de hashtables como los proporcionados por java.util.Hashtable
.
El contrato general de hashCode
es:
Cada vez que se invoca en el mismo objeto más de una vez durante la ejecución de una aplicación Java, el método
hashCode
debe devolver el mismo entero de forma consistente, siempre que no se modifique la información utilizada en comparaciones iguales en el objeto. Este entero no necesita ser consistente desde una ejecución de una aplicación hasta otra ejecución de la misma aplicación.Si dos objetos son iguales de acuerdo con el método
equals(Object)
, entonces llamar al métodohashCode
en cada uno de los dos objetos debe producir el mismo resultado entero.No es necesario que si dos objetos son desiguales de acuerdo con el método
equals(java.lang.Object)
, al invocar el métodohashCode
en cada uno de los dos objetos se produzcan resultados enteros distintos. Sin embargo, el programador debe tener en cuenta que la producción de resultados enteros distintos para objetos desiguales puede mejorar el rendimiento de hashtables.
Tanto como sea razonablemente práctico, el método hashCode definido por el objeto de clase devuelve enteros distintos para objetos distintos. (Esto generalmente se implementa convirtiendo la dirección interna del objeto en un entero , pero esta técnica de implementación no es requerida por el lenguaje de programación Java).
El método hashCode para una clase dada se puede usar para probar la desigualdad de objetos, pero NO la igualdad de objetos, para esa clase.
El método hashCode es utilizado por la clase de colección java.util.HashSet para agrupar los elementos dentro de ese conjunto en depósitos de hash para una recuperación rápida.
Hashcode es un código único que genera la JVM para cada creación de objetos ... usamos hashcode para realizar alguna operación en algoritmos relacionados con hash como hashtable, hashmap, etc. Las ventajas de hashcode es que hace que la operación de búsqueda sea fácil cuando buscamos un objeto que un código único ayuda a descubrir ese obj. Pero no podemos decir que hashcode es la dirección de un obj. Es un código único generado por JVM para cada objeto ... que es ahora el algoritmo de hash día z el algoritmo de búsqueda más popular
Un hashcode()
es una función que toma un objeto y genera un valor numérico. El código hash para un objeto siempre es el mismo si el objeto no cambia.
Funciones como HashMap
, HashTable
, HashSet
, etc. que necesitan almacenar objetos, usarán un módulo de HashTable
HashSet
del tamaño de su matriz interna para elegir en qué "posición de memoria" (es decir, posición de la matriz) almacenar el objeto.
En algunos casos, pueden producirse colisiones (dos objetos terminan con el mismo código hash, y eso, por supuesto, debe resolverse con cuidado).
hashCode()
se utiliza para el agrupamiento en implementaciones Hash
como HashMap
, HashTable
, HashSet
, etc.
El valor recibido de hashCode()
se usa como el número de hashCode()
para almacenar elementos del conjunto / mapa. Este número de cubo es la dirección del elemento dentro del conjunto / mapa.
Cuando lo haga contains()
tomará el código hash del elemento, luego buscará el cubo al que apunta el código hash. Si se encuentra más de 1 elemento en el mismo contenedor (varios objetos pueden tener el mismo código hash), utiliza el método equals()
para evaluar si los objetos son iguales y luego decide si contains()
es verdadero o falso. o decida si el elemento se puede agregar en el conjunto o no.