Как получить все значения, связанные с ключом? - PullRequest
0 голосов
/ 12 февраля 2009

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

Map tempMap = new HashMap();
tempMap.put("1","X");
tempMap.put("2","Y");
tempMap.put("3","Z");
tempMap.put("1","ABC");
tempMap.put("2","RR");
tempMap.put("1","RT");

Как получить все значения, связанные с ключом 1?

Ответы [ 6 ]

7 голосов
/ 12 февраля 2009

вы должны понимать, что ключ на карте уникален.

это означает, что после

tempMap.put("1","X");

«1» отображается на «X»

и после

tempMap.put("1","ABC");

«1» отображается на «ABC», а предыдущее значение («X») теряется

5 голосов
/ 12 февраля 2009

Из Javadoc HashMap:

public V put(K key, V value)

Связывает указанное значение с указанным ключом на этой карте. Если карта ранее содержала сопоставление для ключа, старое значение заменяется .

3 голосов
/ 12 февраля 2009

Что вы можете сделать, это:

Map<String, List<String>> tempMap = new HashMap<String, List<String>>();
tempMap.put("1", new LinkedList<String>());
tempMap.get("1").add("X");
tempMap.get("1").add("Y");
tempMap.get("1").add("Z");

for(String value : tempMap.get("1")) {
  //do something
}

Это разделяет значения, соответствующие клавише "1", в их собственный список, к которому вы можете легко получить доступ. Только не забудьте инициализировать список ... иначе NullPointerException s придет за вами.

Ювал = 8 -)

3 голосов
/ 12 февраля 2009

Я думаю, вы упускаете что-то важное:

Map tempMap = new HashMap();
tempMap.put("1","X");
tempMap.put("2","Y");
tempMap.put("3","Z");
tempMap.put("1","ABC"); // replaces "X"
tempMap.put("2","RR"); // replaces "Y"
tempMap.put("1","RT"); // replaces "ABC"

Также, по возможности, вы должны использовать дженерики, поэтому ваша первая строка должна быть:

Map<String, String> tempMap = new HashMap<String, String>();
3 голосов
/ 12 февраля 2009

не может

попробуйте использовать коллекции Google Multimap

1 голос
/ 12 февраля 2009

Для этого вам необходимо связать каждый ключ с набором значений с соответствующей логикой для создания набора и ввода / удаления значений из него вместо простых put () и get () на карте.

Или вы можете использовать одну из готовых реализаций Multimap, такую ​​как в Apache Commons .

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