Если вы хоть раз писали Map<String, Map<String, Integer>>, знаете, насколько быстро такая структура становится неудобной.
Например, продажи по городу и товару:
Map<String, Map<String, Integer>> sales = new HashMap<>();
sales.computeIfAbsent("Москва", k -> new HashMap<>())
.put("iPhone", 120);
А если нужно получить все города, где продавался iPhone? Придётся обходить вложенные Map.
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


