Las entrevistas técnicas a menudo incluyen preguntas que ponen a prueba tu comprensión de las colecciones, especialmente HashMaps. Un desafío común implica contar las apariciones de elementos dentro de una lista . Esta pregunta ayuda a los entrevistadores a evaluar su capacidad para manejar la agregación de datos de manera eficiente y evitar errores como NullPointerException.
Si eres nuevo en HashMaps, quizás quieras consultar mi Descifrando los conceptos básicos de HashMap: conceptos clave para desarrolladores de Java para obtener conocimientos básicos antes de sumergirte en esta publicación.
En esta publicación, vamos a:
Se le proporciona una lista de números enteros y su tarea es devolver cada número único junto con el recuento de sus apariciones en la lista. Este es un problema típico que pone a prueba su comprensión de la estructura de datos de HashMap y su capacidad para implementarla de manera eficiente.
Aquí tienes un ejemplo:
[1, 2, 3, 5, 2, 1]
{1=2, 2=2, 3=1, 5=1}
Si la lista de entrada es nula o está vacía, el resultado debería devolver un HashMap vacío.
En esta solución, verificamos manualmente si el HashMap ya contiene el número como clave. Si es así, incrementamos el valor; si no es así, insertamos la clave con un valor de 1.
import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; public class CountNumbers { private HashMapgetCount(List list) { // Initialize HashMap to store number counts HashMap map = new HashMap(); // To avoid NullPointerException in case of a null list if (list != null) { // Iterate through each number in the list for (int num : list) { // If first occurrence, add number with count 1 if (!map.containsKey(num)) { map.put(num, 1); } else { // If the number already exists, increment its count by 1 map.put(num, map.get(num) 1); } } } return map; } public static void main(String[] args) { // Using ArrayList Parameterized Constructor with Collection as argument List numbers = new ArrayList(Arrays.asList(1, 2, 3, 5, 2, 1)); CountNumbers nums = new CountNumbers(); System.out.println(nums.getCount(null)); // Result -> {} System.out.println(nums.getCount(numbers)); // Result -> {1=2, 2=2, 3=1, 5=1} } }
Complejidad del tiempo:
Complejidad espacial: O(n) – En el peor de los casos, todos los números son únicos y se almacenan en HashMap.
La clase Java HashMap proporciona una forma más limpia y concisa de manejar este problema con el método getOrDefault(). Elimina la necesidad de la lógica if-else al devolver un valor predeterminado si la clave no se encuentra en el mapa.
V getOrDefault(Object key, V defaultValue)
Parámetros:
Devuelve: el valor al que se asigna la clave especificada, o valor predeterminado si el mapa no contiene ninguna asignación para la clave.
Para obtener más información, puedes consultar el Javadoc oficial de HashMap.
import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; public class CountNumbers { private HashMapgetCount(List list) { // Initialize HashMap to store number counts HashMap map = new HashMap(); // To avoid NullPointerException in case of a null list if (list != null) { // Iterate through each number in the list for (int num : list) { // Cleaner solution using getOrDefault() map.put(num, map.getOrDefault(num, 0) 1); } } return map; } public static void main(String[] args) { // Using ArrayList Parameterized Constructor with Collection as argument List numbers = new ArrayList(Arrays.asList(1, 2, 3, 5, 2, 1)); CountNumbers nums = new CountNumbers(); System.out.println(nums.getCount(null)); // Result -> {} System.out.println(nums.getCount(numbers)); // Result -> {1=2, 2=2, 3=1, 5=1} } }
Aspecto | Enfoque tradicional | Usando getOrDefault() |
---|---|---|
Legibilidad del código | Ligeramente detallado con lógica if-else | Más limpio y conciso |
Actuación | Igual (O(n)) | Igual (O(n)) |
Caso de uso | Funciona para todas las versiones de Java | Requiere Java 8 o superior |
Ambas soluciones producirán el mismo resultado, pero usar getOrDefault() hace que el código sea más conciso y legible. Esta pregunta es una de las favoritas de las entrevistas porque evalúa su comprensión de HashMaps, iteración y manejo de valores nulos. También está estrechamente relacionado con problemas que involucran conteo de frecuencias y agregación de datos.
Si esta publicación te resultó útil, ¡asegúrate de consultar también otras publicaciones de la serie Collections Framework Essentials!
Fundamentos de Java
Conceptos básicos de la entrevista de matriz
Conceptos básicos de la memoria Java
¡Feliz codificación!
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3