Как сохранить несколько значений для одного ключа (Java) - PullRequest
4 голосов
/ 08 сентября 2011

Я ищу структуру данных, в которой я могу сохранить несколько пар ключ-значение.

Данные в основном выглядят так:

(1 , value_1)
(2 , value_2)

Так что я подумал об использовании HashMap. К сожалению, это не будет работать для меня, потому что может произойти несколько значений для одной клавиши.

(В приведенном выше примере:

(1 , value_2)

может быть другой записью)

Есть ли способ оперативного хранения этих данных, кроме создания Списка с новым Объектом или чего-то подобного.

get(1)

должен возвращать value_1 и value_2 в виде списка или набора или чего-либо подобного.

Заранее спасибо

Ответы [ 3 ]

6 голосов
/ 08 сентября 2011

Я думаю, что структура данных, которую вы ищете, находится в библиотеке гуавы Google MultiMap. См. http://guava -libraries.googlecode.com / svn-history / r13 / trunk / javadoc / com / google / common / collect / Multimap.html .

В основном это Map<K,Collection<V>>, но с более простым в использовании интерфейсом.

5 голосов
/ 08 сентября 2011

Если ключи являются целыми числами, а значения, например, строки и значения, принадлежащие одному ключу, различны, вы можете использовать, например, простая структура Java:

Map<Integer, HashSet<String>> container = new HashMap<Integer, HashSet<String>>();

void add(Map<Integer, HashSet<String>> container, int key, String value) {
    HashSet<String> values = container.get(key);
    if (values == null) {
        values = new HashSet<String>();
    }
    values.add(value);
    container.put(key, values);
}
0 голосов
/ 08 сентября 2011

Вы можете использовать HashMap<Integer,Set<T>> или HashMap<Integer,List<T>>, где T - это тип value_1, value_2 и т. Д.

В принципе, get будет делать то, что вы хотите изкоробка.Добавление элементов немного более громоздко;Вы могли бы написать короткую функцию-обертку, чтобы сделать ее лучше.

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