Почему Google Collections не поддерживает MultiKeyMap, как Apache Collections? - PullRequest
7 голосов
/ 03 марта 2010

Является ли решение Google похожим на решение для SortedMultiSet (вопрос stackoverflow) или это потому что нет смысла MultiKeyMap?

Мне известно, что альтернативой MultiKeyMap может быть использование пользовательского класса в качестве ключа, который содержит несколько ключей в качестве членов класса. Наоборот, мне нравится концепция указания нескольких ключей при вызове get для MultiKeyMap.

Апачская версия MultiKeyMap великолепна, но я очень скучаю по Generics и поэтому заглянул в Google Collections для современной реализации. Если у кого-то есть идея, почему Google его еще не поддержал, или есть лучшая альтернатива, пожалуйста, ответьте.

Ответы [ 3 ]

11 голосов
/ 19 сентября 2013

К вашему сведению, принятый ответ был получен в марте 2010 года, но по состоянию на сентябрь 2010 года Гуава включала Table.

7 голосов
/ 04 марта 2010

У нас есть очень хорошая реализация двухуровневой карты, которую мы называем «таблицей» (K1 - «ключ строки», а K2 - «ключ столбца»), и мы просто не выпустили ее еще. Прошлые два ключа, тем не менее, уменьшают отдачу.

3 голосов
/ 03 марта 2010

Я думаю, что дженерики могут быть демонстрацией для реализации здесь. Если вы посмотрите только на интерфейс Map, есть общие спецификаторы для типа ключа (K) и типа значения (V). Я не верю, что можно было бы легко определить его с помощью обобщений без разделения реализаций на несколько классов (по одному для каждого количества ключевых компонентов).

Вам понадобится класс для каждого:

MultiKeyMap2<K1,K2,V>
MultiKeyMap3<K1,K2,K3,V>
MultiKeyMap4<K1,K2,K3,K4,V>
MultiKeyMap5<K1,K2,K3,K4,K5,V>

Базовая реализация в основном делает то, что вы предлагаете (используя пользовательский класс). Тем не менее, он формально не создает класс для него, все встроено. Это действительно деталь реализации. Но для использования коллекций Google пользовательский класс для выполнения того же действия будет работать примерно так же, как я уверен, что реализую hashCode () и equals ().

...