Карта в Карта в Гуава - программирование

Карта в Карта в Гуава

У меня есть код с Map<String, Map<String, String>> объектами, который работает (он создается как HashMap из HashMaps), но мне интересно, есть ли лучший способ представить эту структуру данных в Guava.

Я рассмотрел Multimap, но пока в Guava есть ListMultimap и SetMultimap, я не нашел "MapMultimap".

Я также проверил Table, который, похоже, больше похож на него, но его имя вызывает у меня дискомфорт: что у меня есть определенно не таблица, а дерево. (Между вторыми клавишами нет перекрытия)

Есть ли лучшая альтернатива Гуавы или я должен придерживаться Map<String, Map<String, String>>?

4b9b3361

Ответ 1

Table кажется хорошо подходит для ваших нужд. Но убедитесь, что вы выбрали правильную реализацию. В частности, если ваши второй ключи все различны (столбцы в таблице), результирующая таблица будет скудной, и вы должны учитывать это для управления использованием памяти.

Итак, вы должны избегать массива ArrayTable, но можете использовать любую из других реализаций. Обратите внимание, что docs отмечают, что ImmutableTable оптимизировала реализации для более редких и плотных наборов данных.

Если ваш Table создан сразу, вы можете использовать ImmutableTable.Builder и воспользоваться этой оптимизацией, а также упростить если таблица разделена между несколькими потоками.

Ответ 2

Посмотрите на интерфейс Guava Table.

Пример , похоже, немного перекрывает ваш прецедент:

Обычно, когда вы пытаетесь индексировать более одного ключа на вы закончите с чем-то вроде Map < FirstName, Map < LastName, Person > , который является уродливым и неудобным в использовании. гуайява предоставляет новый тип коллекции Table, который поддерживает этот вариант использования для любых типов "строк" ​​и "столбцов".