Несколько индексов для карты против сложного ключа - PullRequest
0 голосов
/ 17 апреля 2019

Я хочу индексированную коллекцию в Java, но мой конечный объект должен быть проиндексирован многими ключами.

У меня есть коллекция такого типа:

   Map<String, Map<String, Map<String, Map<String, Map<String, Object>>>>> objects

Я спрашиваю, является ли это эффективным или лучше создать более сложный тип ключа, включающий все 5 строковых ключей.

PS: Извините, я не все объяснил. Когда я пытаюсь получить объект с этой коллекцией, путь к этому объекту может быть следующим: (вызвать AX универсальный ключ в 1-й позиции, BX универсальный ключ в 2-й позиции и т. Д ...) A1 -> B1 -> C1 -> D1 -> E1. Но это может быть и A1 -> B2 -> C1 -> D1 -> E1.

Поэтому я спрашиваю, равен ли сложный ключ, который переопределяет, совпадению B2 и B1 как одного и совпадению с двумя описанными путями, это более эффективно, чем иметь вложенную карту.

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Если вам не нужна древовидная структура, и вы всегда хотите найти один сохраненный объект.Я бы предложил иметь составной ключ.Вы можете объединять строки с разделителем в качестве ключа.

Для двух измерений можно использовать таблицу из гуавы: https://github.com/google/guava/wiki/NewCollectionTypesExplained#table

0 голосов
/ 17 апреля 2019

Зависит от того, для чего это нужно.Будете ли вы получать доступ только к большинству вложенных объектов, по одному за раз, или к некоторым из внешних карт.В качестве примера: предположим, что objects - это дома, а ключи карты - это разные части адреса.Сначала это страна, затем город, затем улица, затем номер дома.

Если вы хотите получить все дома в городе X, вероятно, вы хотите использовать вложенные карты, как в вашем примере.Со сложным Address классом в качестве ключа это не будет реально возможно.

Если вам не нужны эти функции и вы всегда будете использовать все части, тогда составной класс будет более удобным

Редактировать:

После вашего редактирования кажется, что составной класс будет лучшим вариантом.Вызов конструктора со значимыми именами параметров (как показывают некоторые IDE) будет намного приятнее, чем цепочка 5 раз .get(String).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...