Есть ли эквивалент boost:: multi_index для Java где-то?

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

Мне любопытно, если что-то подобное существует в мире Java.

Ответ 1

Я только что закончил MultiIndexContainer в Java: http://code.google.com/p/multiindexcontainer/wiki/MainPage. Я знаю, что это не полный эквивалент boost multi_index_container, но, возможно, этого может быть достаточно для вашего требования.

Ответ 3

Я думаю, что короткий ответ - нет, нет очевидного эквивалента.

Класс multi-index boost очень сильно затенен, что нелегко переводит на Java. Есть дженерики, но они совсем не то же самое. (Как отличные от Java-шаблоны шаблоны С++? Почему я не могу использовать int как параметр?).

Итак, без шаблонов, как выглядит класс с несколькими индексами?

Я предполагаю, что у вас будет свой класс данных, например. Человек, содержащий членов индекса, например, реализацию карты. На этом этапе у вас есть выбор:

  • Добавьте некоторые "индексы" непосредственно к класс Person (например, некоторые Hashtables) и написать поиск функции. Управление индексом синхронизация в Лице класс.
  • Напишите класс "IndexProvider" который отделяет индекс функциональность полностью от Person - он должен был бы динамически создавать разные индексы типы, и я бы предположил, что вы обрабатывать синхронизацию через Обратные вызовы.
  • Некоторая смесь из 1) и 2) - как абстрактный базовый класс для индекса функциональность, которая не правильно отделить поведение, но делает некоторое повторное использование кода.

Я думаю, что в большинстве случаев 1) легче всего писать, проще всего поддерживать и, вероятно, наиболее результативно. 2) кажется чрезмерной инженерией.

Другой вариант, если у вас много структур данных, требующих индексации, заключается в их сохранении в базе данных.

Ответ 5

Я понятия не имею, что означает boost:: multi_index, но исходя из остальной части вашего вопроса, я думаю, вы могли бы говорить о карте с несколькими ключами