HashMap Anidado
Parte de la sección Lógica y Flujo del Journey de Java de Coddy — lección 19 de 59.
Un HashMap anidado es un HashMap cuyos valores son a su vez otros HashMaps. Esto te permite organizar datos complejos de manera jerárquica. Por ejemplo, puedes tener un HashMap exterior que mapea categorías (como «Electronics» o «Furniture») a HashMaps interiores que contienen productos y sus precios.
Crear un HashMap anidado: categorías -> (ítems -> precios)
HashMap<String, HashMap<String, Integer>> inventory = new HashMap<>();Añade una categoría "Electronics" con un HashMap interno vacío
inventory.put("Electronics", new HashMap<>());Añade un elemento "Laptop" con precio 1200 en "Electronics"
inventory.get("Electronics").put("Laptop", 1200);Verifica si el mapa exterior está vacío e imprime su tamaño
System.out.println(inventory.isEmpty());
// Output: false
System.out.println(inventory.size());
// Output: 1En este ejemplo, el mapa exterior tiene una clave ("Electronics") que se mapea a un HashMap interior que contiene la clave "Laptop" y su valor 1200.
Desafío
FácilCrea un método llamado <b>printNestedInventory</b> que tome un HashMap anidado llamado inventory como entrada. En este inventario:
- Claves son categorías (p. ej., "Electronics", "Furniture").
- Valores son HashMaps internos donde las claves son nombres de productos y los valores son sus precios.
Tu método debe imprimir el inventario en el siguiente formato:
- Para cada categoría, imprime
Category: <name> - Si la categoría tiene productos, imprime cada uno como
Product: <name>, Price: <price>(con 2 espacios de sangría) - Si la categoría tiene ningún producto, imprime
(No products)(con 2 espacios de sangría)
Ejemplo de salida:
Category: Electronics
Product: Laptop, Price: 1200
Product: Smartphone, Price: 800
Category: Furniture
Product: Chair, Price: 50
Product: Table, Price: 150
Category: EmptyCategory
(No products)Nota: HashMap no garantiza el orden de iteración, por lo que el orden de categorías y productos en tu salida puede diferir del ejemplo anterior — esto es esperado.
Nota: Necesitarás importar java.util.Map además de las otras importaciones proporcionadas.
Hoja de referencia
Un HashMap anidado es un HashMap cuyos valores son a su vez otros HashMaps, lo que permite la organización de datos de forma jerárquica.
Crear un HashMap anidado:
HashMap<String, HashMap<String, Integer>> inventory = new HashMap<>();Agregar una categoría con un HashMap interno vacío:
inventory.put("Electronics", new HashMap<>());Agregar un artículo al HashMap interno:
inventory.get("Electronics").put("Laptop", 1200);Verificar si el mapa externo está vacío y obtener su tamaño:
System.out.println(inventory.isEmpty()); // false
System.out.println(inventory.size()); // 1Pruébalo tú mismo
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void printNestedInventory(HashMap<String, HashMap<String, Integer>> inventory) {
// Iterar sobre cada categoría en el HashMap exterior
// Para cada categoría, imprimir "Category: <name>"
// Si el mapa interior está vacío, imprimir " (No products)"
// De lo contrario, iterar sobre cada producto e imprimir " Product: <name>, Price: <price>"
// Escribe tu código aquí
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String inventoryString = scanner.nextLine();
// Convertir la cadena JSON a HashMap anidado
Type inventoryType = new TypeToken<HashMap<String, HashMap<String, Integer>>>(){}.getType();
HashMap<String, HashMap<String, Integer>> inventory = new Gson().fromJson(inventoryString, inventoryType);
printNestedInventory(inventory);
}
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
1Arreglos Multidimensionales
Básicos de Arreglos 2DAccediendo a Elementos de Arreglos 2DBucles Anidados con Arreglos 2DResumen - Arreglos 2DSuma y Resta de MatricesArreglos IrregularesArreglos 3D y Más AlláPatrones Comunes de Arreglos 2DResumen - Todo Sobre Arreglos4HashSet Parte 1
¿Qué es un HashSet?Agregando un elementoEliminando un elementoComprobando si existe un elementoVacío y tamañoLimpiar y clonarResumen - HashSet7Manejo Básico de Errores
Básicos de Try-CatchBloque FinallyLanzamiento de ExcepcionesExcepciones Personalizadas2HashMap Parte 1
¿Qué es un HashMap?Declarar un HashMapAcceder a ValoresVerificar si una Clave ExisteModificar DiccionariosResumen - HashMap3HashMap Parte 2
Métodos de HashMapIterar con keySet()Iterar con entrySet()HashMap AnidadoResumen - Gestionar AlmacénResumen - Operaciones de HashMap6Flujo de Control Avanzado
Sentencias EtiquetadasExpresión SwitchCoincidencia de PatronesCláusulas de GuardiaResumen - Flujo de Control9Proyecto - Contador de Palabras Únicas
Entrada y Almacenamiento de TextoProcesamiento de Palabras