Может ли Hash Map иметь ключ, состоящий из 2 значений? - PullRequest
0 голосов
/ 03 ноября 2011

У меня есть таблица, состоящая из 10 столбцов в базе данных. В одном из столбцов есть альфаневрические значения, которые были заданы в качестве ключа для хэш-карты, в которой все значения будут представлены в качестве объектов для каждой строки в хэш-карте. Пример: A10 (ключ), rowobj (класс). Теперь в этом же столбце присутствует другое значение как A10. Так что теперь, если мы пытаемся загрузить значения в hashmap из таблиц, так как имя ключа одно и то же, будет ли зарегистрировано несколько значений для одного и того же имени ключа?

Также можем ли мы объединить значения 2 столбцов, чтобы создать уникальный ключ для хэш-карты? Как это сделать?

Спасибо

Ответы [ 4 ]

3 голосов
/ 03 ноября 2011

Два варианта:

  • создайте объект-оболочку, который содержит все значения в виде полей, задайте их, а затем map.put(id, rowObject)
  • использование Multimap (гуава)
2 голосов
/ 03 ноября 2011

Разве вы не можете использовать первичный ключ таблицы в качестве ключа вашего HashMap?

1 голос
/ 03 ноября 2011

Вы можете использовать HashMap, где ключ по-прежнему A10, но теперь это значение List.

Таким образом, вы можете иметь несколько значений для одного и того же ключа. Вы должны обратить внимание только на вставку, что новый список создается при вставке первого элемента. Может быть что-то вроде (в псевдокоде):

HashMap<String, List> myMap = new HashMap<String,List>;

for (elements to insert){

if (!myMap.containsKey(element.key()))
   ArrayList myList = new ArrayList();
   myList.add(element);
   myMap.put(element.key(), myList);
}else{
   ArrayList myList = myMap.get(element.key());
   myList.add(element);
   myMap.put(element.key(), myList);
}
}
0 голосов
/ 03 ноября 2011

Если вы имеете в виду, что ключ x должен отображаться в список vals (которые представляют собой значения, которые представляет x ), то это легко выполнимо, как это (не проверял синтаксис, поэтому не ожидайте его компиляции):

//assuming that the keys are of type int and values are of type String
Map<int,List<String>> myMap = new HashMap()<int, new ArrayList()<String>>;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...