¿Por qué las entrevistas preguntan sobre el principio de hashmap?
HashMap
Cómo funciona
HashMap
Todos saben dónde usarlo
HashMap p >
, conoce la diferencia entre
Hashtable
y
HashMap
HashMap
. p>, entonces
¿Por qué esta pregunta de la entrevista es tan especial? Porque la profundidad de la investigación de este tema es muy grande.
Esta pregunta suele surgir en entrevistas de alto nivel o de nivel medio.
Los bancos de inversión prefieren hacer esta pregunta e incluso le pedirán que implemente un HashMap para poner a prueba sus habilidades de programación.
ConcurrentHashMap
La introducción de ConcurrentHashMap y otras colecciones sincronizadas complica aún más este problema. ¡Comencemos
el viaje del descubrimiento!
Primero algunas preguntas simples
"¿Has usado alguna vez
HashMap
?
"¿Qué es?
HashMap
? ¿Por qué usarlo?
Casi todo el mundo responderá "sí" y luego responderá
Algunas características de HashMap
, como
HashMap
puede aceptar claves y valores
nulo
, pero
Hashtable
no;
HashMap
es asincrónico
; HashMap
es rápido;
y
HashMap
¡Almacenamiento de pares clave-valor! .
Esto indica que ha utilizado
HashMap
y está bastante familiarizado con él
. Sin embargo, el entrevistador cambió de tema y a partir de este punto comenzó a hacer preguntas difíciles sobre los detalles básicos de HashMap
. El entrevistador puede hacer las siguientes preguntas:
"¿Sabes
cómo funciona HashMap
?
"¿Sabes< cómo ¿Funciona el método /p>
HashMap
get()
?
Puedes responder: "No he mirado el estándar en detalle
Java API
, puedes consultar
Java
Código fuente o
Abrir JDK
".
"Puedo encontrar la respuesta usando
".
Pero algunos entrevistadores pueden dar esta respuesta:
"
HashMap
se basa en
hashing
Principio,
Usamos
put(clave,
valor)
para almacenar en
HashMap
y use
get(key)
de
HashMap
cuando pasamos la clave y valor al métodoput()
,
primero llamamos al
hashCode()
método,
y el
hashCode
devuelto se utiliza para buscar objetos de almacenamiento
Entry
.
ubicación del depósito
".
El punto clave aquí es señalar que
HashMap
almacena objetos clave y
objetos de valor en
depósito
.en
Map.Entry
. Esto ayuda a comprender la lógica de obtener el objeto. Si no eres consciente de esto,
o crees erróneamente que solo los valores se almacenan en
depósitos
,
lo harás. No poder responder a la lógica de cómo obtener pares de objetos
HashMap
de
HashMap
. Esta respuesta es muy correcta y demuestra que el entrevistador sí sabe cómo funcionan
hashing
y
HashMap
<. p>. Pero esto es solo el comienzo de la historia. Cuando el entrevistador agrega algunos escenarios reales deJava
que los programadores encuentran todos los días
, la respuesta incorrecta es Will. aparecen con frecuencia. La siguiente pregunta podría ser sobre la detección de colisiones en
HashMap
y cómo resolverlas:
"Cuando dos objetos p>
Cuando los códigos hash son iguales, se producirá una colisión.
A partir de aquí comienza la verdadera confusión, algunos aspectos
El evaluador responderá que desde
los códigos hash
son los mismos,
los dos objetos son iguales,
por lo tanto HashMap
p>lanzar una excepción
o
no almacenarlos, y el entrevistador puede recordarles que hay
equals()
. yhashCode()
y decirles que incluso si
los dos objetos tienen el mismo
ashcode
, es posible que no sean iguales y algunos encuestados pueden darse por vencidos, mientras que
otros pueden seguir intentándolo y respondiendo "porque"
Los códigos hash
son iguales, por lo que sus
posiciones
también son las mismas,
se producirá una 'colisión'. 'sucederá. Dado que
HashMap
usa
LinkedList
para almacenar objetos, esta
Entry(
Entrada
Objeto
contiene pares clave-valor)
se almacenará en
LinkedList
medio. Esta respuesta tiene mucho sentido. Aunque hay muchas formas de manejar las colisiones
, este método es el más simple y es exactamente como
HashMap
maneja las colisiones. . método. Pero la historia no termina ahí, el entrevistador
preguntará:
"Si dos claves tienen el mismo
código hash
,
¿Cómo se obtiene el objeto de valor?
El entrevistador responderá:
Cuando llamamos a
get()
p>método,
HashMap
utilizará el
ashcode
del objeto clave para buscar
posición del depósito
, y luego obtenga el objeto de valor
Recuérdele que si hay dos objetos de valor almacenados en el mismo
depósito
, la respuesta que dio es
:
Atravesará
LinkedList
hasta encontrarlo
Objeto de valor.
El entrevistador le preguntará, dado que no tiene ningún objeto de valor para comparar,
¿Cómo puede estar seguro de haber encontrado un objeto de valor? A menos que el entrevistador
no sepa
HashMap
almacena pares clave-valor en
LinkedList
, de lo contrario, es poco probable que respondan la pregunta.
Algunos de los entrevistadores que recuerdan este punto dirán:
Después de encontrar la
ubicación
del depósito,
p>
Se llamará al método
keys.equals()
para encontrar la
LinkedList
correcta. nodo y finalmente encuentre el objeto de valor que está buscando. Respuesta perfecta