Red de conocimientos turísticos - Conocimientos sobre calendario chino - ¿Por qué las entrevistas preguntan sobre el principio de hashmap?

¿Por qué las entrevistas preguntan sobre el principio de hashmap?

HashMap

HashMap

Cómo funciona

HashMap

Todos saben dónde usarlo

HashMap

, 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

Google

".

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étodo

put()

,

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 de

Java

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

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()

. y

hashCode()

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