Zagnieżdżona HashMap
Część sekcji Logika i przepływ sterowania ścieżki Java w Coddy. Lekcja 19 z 59.
Zagnieżdżona HashMap to HashMap, której wartości same są obiektami HashMap. Dzięki temu możesz organizować złożone dane hierarchicznie. Na przykład możesz mieć zewnętrzną HashMap, która mapuje kategorie (takie jak "Electronics" lub "Furniture") na wewnętrzne obiekty HashMap zawierające produkty i ich ceny.
Utwórz zagnieżdżoną HashMap: kategorie -> (elementy -> ceny)
HashMap<String, HashMap<String, Integer>> inventory = new HashMap<>();Dodaj kategorię „Electronics” z pustą wewnętrzną mapą HashMap
inventory.put("Electronics", new HashMap<>());Dodaj element „Laptop” o cenie 1200 do „Electronics”
inventory.get("Electronics").put("Laptop", 1200);Sprawdź, czy zewnętrzna mapa jest pusta, i wyświetl jej rozmiar
System.out.println(inventory.isEmpty());
// Wynik: false
System.out.println(inventory.size());
// Wynik: 1W tym przykładzie zewnętrzna mapa ma jeden klucz ("Electronics"), który wskazuje na wewnętrzną mapę HashMap zawierającą klucz "Laptop" i jego wartość 1200.
Wyzwanie
ŁatwyUtwórz metodę o nazwie printNestedInventory, która przyjmuje jako dane wejściowe zagnieżdżoną mapę HashMap o nazwie inventory. W tej mapie:
- Klucze to kategorie (np. "Electronics", "Furniture").
- Wartości to wewnętrzne mapy HashMap, w których kluczami są nazwy produktów, a wartościami ich ceny.
Twoja metoda powinna wypisać zawartość mapy w następującym formacie:
- Dla każdej kategorii wypisz
Category: <name> - Jeśli kategoria zawiera produkty, wypisz każdy z nich w formacie
Product: <name>, Price: <price>(z wcięciem składającym się z 2 spacji) - Jeśli kategoria nie zawiera produktów, wypisz
(No products)(z wcięciem składającym się z 2 spacji)
Przykładowy wynik:
Category: Electronics
Product: Laptop, Price: 1200
Product: Smartphone, Price: 800
Category: Furniture
Product: Chair, Price: 50
Product: Table, Price: 150
Category: EmptyCategory
(No products)Uwaga: HashMap nie gwarantuje kolejności iteracji, więc kolejność kategorii i produktów w wyniku może różnić się od tej w powyższym przykładzie. Jest to oczekiwane.
Uwaga: Oprócz pozostałych podanych importów musisz zaimportować java.util.Map.
Spróbuj swoich sił
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) {
// Przejdź przez każdą kategorię w zewnętrznym HashMap
// Dla każdej kategorii wypisz "Category: <name>"
// Jeśli wewnętrzna mapa jest pusta, wypisz " (No products)"
// W przeciwnym razie przejdź przez każdy produkt i wypisz " Product: <name>, Price: <price>"
// Wpisz tutaj swój kod
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String inventoryString = scanner.nextLine();
// Przekształć ciąg JSON w zagnieżdżony HashMap
Type inventoryType = new TypeToken<HashMap<String, HashMap<String, Integer>>>(){}.getType();
HashMap<String, HashMap<String, Integer>> inventory = new Gson().fromJson(inventoryString, inventoryType);
printNestedInventory(inventory);
}
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ sterowania
1Tablice wielowymiarowe
Podstawy tablic 2DDostęp do elementów tablic 2DPętle zagnieżdżone z tablicami 2DPodsumowanie — tablice 2DDodawanie i odejmowanie macierzyTablice postrzępioneTablice 3D i większeTypowe wzorce dla tablic 2DPodsumowanie — wszystko o tablicach2HashMap część 1
Czym jest HashMap?Deklarowanie HashMapDostęp do wartościSprawdzanie, czy klucz istniejeModyfikowanie słownikówPodsumowanie — HashMap3HashMap — część 2
Metody HashMapIterowanie za pomocą keySet()Iterowanie za pomocą entrySet()Zagnieżdżona HashMapPowtórka — zarządzanie magazynemPowtórka — operacje na HashMap6Zaawansowany przepływ sterowania
Instrukcje etykietująceWyrażenie switchDopasowywanie wzorcówKlauzule ochronnePowtórzenie — przepływ sterowania9Projekt — licznik unikalnych słów
Wprowadzanie i przechowywanie tekstuPrzetwarzanie słówPoćwicz samodzielnie: Kompilator Java online