Продвинутая Map, часть 2: два ключа вместо вложенности Если вы хоть… — Библиотека джависта | Java, Spring, Maven, Hibernate — TG.ME

📈 Продвинутая Map, часть 2: два ключа вместо вложенности

Если вы хоть раз писали Map<String, Map<String, Integer>>, знаете, насколько быстро такая структура становится неудобной.
Например, продажи по городу и товару:


Map<String, Map<String, Integer>> sales = new HashMap<>();

sales.computeIfAbsent("Москва", k -> new HashMap<>())
.put("iPhone", 120);


А если нужно получить все города, где продавался iPhone? Придётся обходить вложенные Map.

🈶 В Guava для таких случаев есть Table<R, C, V> — структура с двумя ключами:


Table<String, String, Integer> sales = HashBasedTable.create();

sales.put("Москва", "iPhone", 120);
sales.put("Питер", "iPhone", 90);

sales.get("Москва", "iPhone"); // 120


❗️Главное преимущество — можно работать не только со строками, но и со столбцами:


sales.row("Москва");
// {iPhone=120}

sales.column("iPhone");
// {Москва=120, Питер=90}


Есть несколько реализаций под разные задачи:

→ HashBasedTable — hash-таблицы с предсказуемым порядком итерации
→ TreeBasedTable — отсортированные ключи
→ ArrayTable — строки и столбцы известны заранее
→ ImmutableTable — неизменяемая таблица

📌 Если данные естественно описываются парой «строка + столбец», Table может оказаться удобнее вложенных Map.

══════ Навигация ══════
ВакансииЗадачиСобесы

🐸 Библиотека джависта

#CoreJava
2👍7🔥4❤3
August 17, 2026 2.4K 14