ABC de HashMap.
1. HashMap generará hashcode para cada clave, independientemente del tipo de objeto.
2. Para ser específico - código hash se genera en base a la clave y el valor (es decir, de entrada.)
Experimento: Considérese un objeto definido por el usuario (por ejemplo SPObject.) Es la clave para un HashMap; SPObject solo tiene un parámetro (name) en él. Consulte: http://www.programcreek.com/2011/07/java-equals-and-hashcode-contract/
Si hashCode() y equals() no se escriben correctamente en la clase SPObject, los problemas se detallan a continuación.
Poner 2 entradas - nuevo SPObject ("SP") & nuevo SPObject ("SP"). Estos se tratan como un objeto diferente y se almacenan en el mapa con éxito.
map.get (nuevo SPObject ("SP")) devolverá nulo.
map.contains (nuevo SPObject ("SP")) devolverá falso.
Este es el resultado, si el contrato hashCode/equals no se maneja correctamente.
hashCode() | equals() | Treated as | Description
No | No | Duplicate | Stored in different buckets.
| Treated as different object.
Yes | No | Duplicate | Stored in same bucket.
| Treated as different object.
| Because, the default(Object) equals method will check only the reference of objects.
No | Yes | Duplicate | Stored in different buckets.Treated as different object
Yes(hashlogic) | Yes | Unique | Stored in same bucket.Treated as same object.Efficient.
Yes(constant) | Yes | Unique | Stored in same bucket.Treated as same object.
| Inefficient, because it will iterate bucket elements for equality check.
¡Gracias por la aclaración! – prasopes
"Si algo es un bus, es rojo" ¿Qué tan británico es usted :-) –
Jon, ¿me puede dar algún ejemplo donde HashCode podría ser el mismo pero los objetos no son iguales? – UnKnown