2013-12-25 2 views
0

У меня есть следующие данные в моем HashMapКак я могу вернуть ключи определенного значения в Hashmap?

<key1,value1> 
<key2,value2> 
<key3,value2> 
<key4,value4> 
<key5,value2> 

Я хотел бы, чтобы найти все ключи, которые содержат значение «значение2». Ответ будет KeySet, содержащий следующие ключи: {key2, key3, key4}

Возможно ли это сделать в HashMap? thanks

+1

Я предполагаю, что вы устраняете итерирование по HashMap и проверяете значение, соответствующее каждой клавише. –

+1

Вы ищете двунаправленную карту, также называемую «multimap». Существует реализация в библиотеке [Guava] (http://code.google.com/p/guava-libraries/). Это также не сложно сделать сами ... обратная карта использует значение в качестве ключа (при условии, что класс значения имеет 'hashCode()' и 'equals()') и 'List ' в качестве значения. 'List ' требуется, потому что у вас будет более одного сопоставления клавиш с заданным значением. –

ответ

1

просто итерация записей вашей карты и ch eck, если значение текущей записи равно «value2», а затем добавьте ее в Set. попробовать этот

Set<String> keySet = new HashSet<String>(); 
for (Map.Entry<String, String> entry : map.entrySet()) 
{ 
    if(entry.getValue().equals("value2") 
    { 
     keySet.add(entry.getKey()); 
    } 

} 

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

1

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

Если вы уверены в том, что делаете, нет хорошего пути к достижению. Перейдите по карте и сохраните ключи в отдельном списке.

Подробнее смотрите на Gauva's Multimap, который может удовлетворить ваши требования.

1

Я хотел бы найти все Ключи, которые содержат значение «значение2». Ответ будет Keyset, содержащий следующие ключи: {key2, ключ3, Key4}

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

  • новая карта, где значения являются ключи и ключи значения (если каждый ключ и значение является уникальным)
  • итерации по записи вашей карты и проверить, если значение текущей записи равно «значение2», если да, то добавить его в наборе результатов
+1

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

+1

@AkshatSinghal. Конечно, вы правильно, обновил ответ. –

+0

Я предполагаю, что другого выхода нет, кроме тех, которые вы указали, или есть? Существующие решения, похоже, очень сложны. –

Смежные вопросы