Preguntas y respuestas de la entrevista de Hashmap [para principiantes y experimentados]

Publicado: 2020-09-24

La clase de java.util.HashMap es, con mucho, una de las bibliotecas más importantes de Java. Rara vez hay algún proyecto que esté escrito en Java y no use la biblioteca de HashMap en su implementación. Es la forma en que se implementa esta estructura de datos, lo que la hace casi indispensable para cualquier programa relacionado con Java. HashMap, en su definición, es muy simple. HashMap es una estructura de datos que se implementa utilizando un enfoque muy tabular.

Se dice con razón que si solo hubiera una estructura de datos, debería ser HashMap. Esto no solo es muy útil, sino también muy eficiente en el tiempo. Una búsqueda simple en HashMap solo toma alrededor de O (1) tiempo (lo que significa que toda la búsqueda en un HashMap se realiza en tiempo constante). Encontrará muchas implementaciones de HashMap en el lenguaje de programación de Java, como HashTable, concurrenthashmaps, etc. Sin embargo, si está buscando una implementación general, no debe alejarse mucho del HashMap básico.

Cada una de estas implementaciones de HashMap viene con sus propios conjuntos de características y casos de uso. Si desea que se conserve el orden en el que ha escrito el mapeo, debe buscar usar Linked HashMap. Si desea que se ordene su mapeo, entonces debe usar la implementación TreeMap de HashMap, que hace la clasificación por usted.

De manera similar, si está buscando una tabla Hash que sea segura para subprocesos, que también se puede usar en una aplicación simultánea manteniendo la escalabilidad, estaría buscando un HashMap concurrente.

Como puede ver, hay varias formas en las que puede usar HashMap. Para conocer realmente la importancia de HashMap, debe ver las preguntas de la entrevista para cualquier perfil de trabajo de ingeniería de software. No podrá optimizar el tiempo correctamente si no sabe cómo implementar correctamente un HashMap. Entonces, si eres programador, no puedes dejar de aprender los entresijos de HashMap. Por lo tanto, hemos enumerado algunas preguntas destacadas de la entrevista de hashmap a continuación, que deberían ayudarlo a prepararse para su próxima entrevista.

Aprenda el curso de ciencia de datos en línea de las mejores universidades del mundo. Obtenga programas Executive PG, programas de certificados avanzados o programas de maestría para acelerar su carrera.

Tabla de contenido

Preguntas y respuestas de la entrevista Hashmap

Q1. ¿Cómo utilizará el método put() de HashMap en Java?

Respuesta El método put() simplemente funciona haciendo uso del principio conocido como hashing. Haría uso de esta función para almacenar el objeto en cuestión en el backend (que es una matriz de memoria). Tendría que usar otra función junto con esta función put() para poder determinar la posición exacta de este objeto en el backend. La función hashcode() se utiliza como función auxiliar para poner() de la forma que hemos descrito anteriormente.

Entonces, la forma en que estas dos funciones funcionan juntas es que van y buscan la clave disponible y la ubicación de la memoria en el backend. Si chocan, entonces el objeto que tiene ambos valores (es decir, los valores de clave y valor) se agrega a una implementación dinámica de una lista, también conocida como lista vinculada. La lista de Me gusta aquí se almacena en la ubicación de la memoria, que se encontró anteriormente.

Q2. ¿Cuáles son las necesidades básicas que debe tener un objeto para que se use como clave o como valor de un HashMap?

Respuesta Tanto la clave como el valor que usamos en cualquier HashMap y su implementación también deben tener estas dos funciones escritas en ellos. El nombre de estas dos funciones es equals() y hashcode(). La función que tiene el nombre de hashcode() se usa cuando insertamos el valor de la clave en cualquier HashMap. Al mismo tiempo, la función de equals() se llama solo cuando intentamos recuperar el valor que ya estaba almacenado en HashMap.

Q3. Digamos que ha perdido la pista de las claves que ya ha utilizado en su HashMap. La siguiente clave que desea agregar ya está presente en HashMap. ¿Qué crees que pasará en este caso?

Respuesta Si sientes que debe haber un error, no te equivocarás si no estuviéramos hablando de HashMap. Sin embargo, si está utilizando HashMap e inserta una clave cuyo valor ya estaba presente en el hashmap, el compilador de Java no arrojará ningún error. En cambio, lo que sucederá es que el compilador simplemente buscará el valor asociado con la clave que ingresó, y solo actualizará el valor allí.

Si usa la función put() para agregar el valor al hashmap, el valor de retorno de esta función sería el valor anterior asociado con esa clave. Entonces, supongamos que para la clave A, tiene un valor almacenado de 1. Si ahora pone el valor de A, digamos 50, entonces el valor que devolverá la función put () será 1 , y el valor final almacenado en la clave A sería 50.

Q4. En caso de que surja la necesidad de almacenar un valor nulo. ¿Serías capaz de usar HashMap en ese caso?

Respuesta Sí, podríamos usar hashmap en ese caso sin ningún problema porque los hashmaps no reducen el valor que puede almacenar. Puede almacenar tantos valores nulos como desee en cualquier mapa hash.

P5. ¿Cómo se maneja la colisión con la implementación de hashmap en Java?

Respuesta La biblioteca de código de java.util.HashMap usa el método de encadenamiento para manejar las colisiones. La forma en que funciona este encadenamiento es que cualquier entrada nueva al mapa hash, que contiene tanto la clave como el par de valores, se almacenaría en una lista vinculada, y esta lista luego se almacenaría donde residen los datos existentes de los mapas hash (la ubicación del depósito) .

En el caso de que todas las claves que tiene en su hashmap resulten tener el mismo código hash, entonces su hashmap ya no será hashmap. Se convertirá en una lista enlazada. El tiempo de búsqueda aumentará para el orden de uno (o(1)), es decir, tiempo constante, hasta el orden de N (O(N)) que es tiempo lineal.

P6. ¿Podrá almacenar una clave que tenga un valor nulo en la implementación de hashmap de Java?

Respuesta Sí, en la implementación de Java del hashmap, podrá almacenar claves con un valor nulo. Pero solo podrá almacenar una de esas claves, que siempre se almacenará al comienzo de la lista de deseos. El mapa hash no llamará a la función hashcode() aquí porque si esa función se usa en una clave nula, arrojará un error de excepción de puntero nulo. Tendrá que usar la función get en lugar de usar el valor nulo como clave si desea que se le devuelva el primer índice de su hashmap.

Leer: Clasificación en la estructura de datos: categorías y tipos

P7. ¿Qué estructura de datos crees que hashmap está diseñado para imitar?

Respuesta Se supone que el mapa hash imita el aspecto y la funcionalidad de la estructura de datos de la tabla hash. La estructura de datos de la tabla hash es su opción ideal si desea almacenar los valores en forma de un par de clave y valor. La razón principal por la que se prefiere esta tabla hash es por el tiempo de búsqueda. Por lo tanto, si tiene la clave que desea buscar, entonces, en un solo orden o en un tiempo constante, podrá recuperar el valor que desea.

P8. Dado que hashmap no es una de las estructuras de datos centrales como estructura o matrices. ¿Qué crees que sucede debajo del capó cada vez que creas un hashmap? ¿Qué combinación de estructura de datos crees que nos dio los hashmaps?

Respuesta Aunque el mapa hash en realidad representa una tabla hash, pero bajo el capó, no se implementa directamente. Usamos dos estructuras de datos bien conocidas para dar vida a un hashmap. Usamos una lista enlazada y matrices. Se usa una lista enlazada para almacenar dinámicamente el par de clave y valor, y la matriz se usa para almacenar todas estas listas enlazadas en ellos; juntos, forman un hashmap.

Desde Java 8, si la lista enlazada se vuelve lo suficientemente grande, entonces, en lugar de la lista enlazada, Java implementa un árbol de búsqueda binario. Este cambio se realiza para ahorrar tiempo y mejorar el rendimiento general de hashmap.

Lea también: Preguntas de la entrevista de ciencia de datos

P9. En caso de que queramos almacenar múltiples valores bajo la misma clave, ¿crees que será posible en la implementación de hashmap presente en Java?

Respuesta No, no podrá almacenar claves duplicadas en el hashmap. Si intenta almacenar un nuevo valor en una clave que ya está presente en el mapa hash, el mapa hash simplemente eliminará el valor que se almacenó anteriormente en esa clave y lo reemplazará con el nuevo.

El tamaño del hashmap, en este caso, no cambiaría, lo que significa que no se agregarán claves al hashmap. Esta característica es una de las razones por las que usamos la función keyset() para recuperar todas las claves de un hashmap y que esta función devuelve un conjunto y no una colección (porque en un conjunto todos los valores deben ser únicos).

P10. ¿Podrá almacenar valores duplicados en HashMap?

Respuesta Sí, podrá almacenar valores duplicados en el hashmap. Esa es la razón por la que recupera todos los valores del hashmap. Luego, en lugar de obtener un conjunto, obtenemos una colección. No da el valor en forma de lista porque no se garantiza el orden.

P11. En la implementación de Java del hashmap, ¿es seguro para subprocesos?

Respuesta No, el Hashmap vainilla no es seguro para subprocesos en Java. Idealmente, debe evitar compartir el mapa hash con un hilo que pueda cambiar el valor y editar el mapa hash de cualquier forma. Sin embargo, puede usar un mapa hash de solo lectura y luego introducirlo en el hilo. De esta manera, los valores contenidos en ellos no cambiarán.

P12. ¿Qué crees que sucederá si usamos el mapa hash en una aplicación que usa subprocesos múltiples?

Respuesta Si pasa un mapa hash a una aplicación que usa más de un subproceso, y cada uno de estos subprocesos puede modificar, agregar o eliminar los valores que están almacenados en el mapa hash, entonces los datos internos a través de los cuales se construyó el mapa hash estarían dañados . Los enlaces que se usaron para formar el hashmap desaparecerían, y luego el hashmap perdería su estructura y su propósito también se perdería. Por lo tanto, siempre se recomienda que siempre use hashmap seguro para subprocesos si los va a usar en una aplicación que tiene subprocesos.

P13. Si queremos iterar sobre todo el HashMap en Java. ¿Cuáles son las diferentes formas en que podríamos hacer eso?

Respuesta Hay muchas formas en las que podría iterar sobre un hashmap en java; algunos de ellos se enumeran a continuación:

  1. Puede usar la función keySet junto con una variable de iteración.
  2. Puede usar la función enterySet junto con una variable de iteración.
  3. Puede usar la función entrySet y usarla con un bucle mejorado.
  4. Puede usar keySet y obtener un método.

Lea también: Estructuras de datos y algoritmos en Python: todo lo que necesita saber

¿Qué sigue?

Si tiene curiosidad por aprender sobre ciencia de datos, consulte el Programa ejecutivo PG en ciencia de datos de IIIT-B y upGrad, creado para profesionales que trabajan y ofrece más de 10 estudios de casos y proyectos, talleres prácticos, tutoría con expertos de la industria, 1 -on-1 con mentores de la industria, más de 400 horas de aprendizaje y asistencia laboral con las mejores empresas.

¿En qué se diferencia una Hashtable de un HashMap?

Una estructura de datos no sincronizada es un HashMap. Una tabla Hash, por otro lado, es segura para subprocesos y se puede compartir entre muchos subprocesos sin el requisito de un código de sincronización. Hashtable no permite una clave nula o múltiples valores nulos, pero HashMap sí lo permite. HashMap debe usarse en lugar de Hashtable en aplicaciones sin subprocesos. En pocas palabras, HashMap debe utilizarse en aplicaciones de un solo subproceso o no sincronizadas.

¿Es más rápido usar un HashMap o un TreeMap?

En un TreeMap, los valores están determinados por la clave. No puede tener una clave nula, pero puede tener varios valores nulos. Es idéntico a HashMap, excepto que en lugar del orden ascendente, conserva el orden ascendente (Ordenado usando el orden natural de su clave). HashMap emplea una estructura de datos basada en matrices para organizar sus componentes de acuerdo con la función hash como una implementación basada en tablas hash. Para la mayoría de las operaciones como agregar (), eliminar () y contiene, HashMap pronostica el rendimiento en tiempo constante de O (1) (). Como resultado, es mucho más rápido que un TreeMap.

¿Cuándo es mejor usar HashMap en lugar de ArrayList?

Solo cuando las claves únicas están disponibles para los datos que deseamos almacenar, HashMap tiene sentido. Al buscar cosas basadas en una clave, debemos usarla ya que el tiempo de acceso rápido es imprescindible. Cuando es fundamental mantener el mismo orden de las entradas en una colección, debemos evitar HashMap. Ambos son distintos entre sí y tienen propósitos distintos. Si desea almacenar objetos en Java, use HashMap para asignar claves a valores y ArrayList de lo contrario.