Существует ли в Java коллекция «многие ко многим», в которой используется универсальная модель (модель предметной области, а не уровень постоянства) - PullRequest
17 голосов
/ 23 января 2009

Я, кажется, использую неправильные условия поиска в Google ...

Я написал общий класс для ассоциаций «многие ко многим», но, полагаю, это уже сделано. Весьма вероятно, что он существует в реализации гораздо лучше, чем моя собственная. Это моя первая попытка написать общий класс.

Для лучшего понимания того, что я ищу, я привожу несколько моих собственных фрагментов:

Я подкрепил его двумя хэш-картами:

private final Map<T, List<S>> ssForTs = new HashMap<T, List<S>>();
private final Map<S, List<T>> tsForSs = new HashMap<S, List<T>>();

Вот пример:

new ManyToManyAssociations<Integer, Integer>();

Некоторые из доступных методов:

  • public void addAssociation (T t, S s)
  • public void removeAssociation (T t, S s)
  • публичный список getListOfTs ()
  • публичный список getListOfSs ()
  • публичный список getTsForSs (S s)
  • публичный список getSsForTs (T t)

Названия методов довольно скудны ... Прошу прощения.

Базовое использование: Я могу найти все S для T и наоборот довольно легко.

Можете ли вы опубликовать ссылку на полированную библиотеку, которая уже включает эту функцию?

Ответы [ 2 ]

4 голосов
/ 23 января 2009

Пока что это менее тривиальный вопрос, чем я думал. Мне известно о двух расширениях Java Collections, которые я упомянул в duffymo, и Apache Commons Collections . Ни у одного нет карты многие-ко-многим. В терминологии Google это будет BiMultiMap; в Apache это будет BidiMultiMap или MultiBidiMap.

2 голосов
/ 23 января 2009

Похоже, Apache Commons Multimap может быть полезным.

РЕДАКТИРОВАТЬ: за исключением того, что это один ко многим, а не много ко многим. Тем не менее, это может быть удобно использовать вместо ваших Map<T, List<S>> и Map<S, List<T>> или в качестве справочного материала.

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