Получение ключа с хэш-карты - PullRequest
1 голос
/ 24 января 2012

Я новичок в Java.Я реализовал Hash Map, как показано ниже.В конкретном сценарии я хотел получить ключ, используя значения ключа.Например: если пользователь вводит «Дравид», то мне нужно извлечь «2» из Хэш-карты.

И я хочу использовать только одну хеш-карту для реализации этого.

Может кто-нибудьпомогите мне с этим?

HashMap<String,String> streetno=new HashMap<String,String>();
    streetno.put("1", "Sachin");
    streetno.put("2", "Dravid");
    streetno.put("3","Sehwag");
    streetno.put("4", "Laxman");
    streetno.put("5", "Kohli");

Ответы [ 4 ]

3 голосов
/ 24 января 2012

Короткая версия, так что вам есть что реализовать:

Переберите все записи на карте и сравните строку поиска со значением записи. Если он совпадает, верните ключ.

2 голосов
/ 24 января 2012

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

HashMap предназначен для быстрого и эффективного поиска значения, если вы знаете ключ, но не наоборот.Есть некоторые библиотеки, которые имеют карты, которые позволяют вам искать значение по ключу, а также наоборот. Google Guava , например, имеет BiMap, который поддерживает это.

Используя Guava's HashBiMap, вы можете сделать это:

BiMap<String, String> map = HashBiMap.create();
map.put("1", "Sachin");
map.put("2", "Dravid");
map.put("3", "Sehwag");
map.put("4", "Laxman");
map.put("5", "Kohli");

String key = map.inverse().get("Dravid");
1 голос
/ 24 января 2012

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

if(streetno.containsValue("Dravid")){
  // do logic
}
else
System.out.println("Not found");
1 голос
/ 24 января 2012

Для этого вам нужно использовать двунаправленный хэш-карту.Подумайте об использовании реализации Apache Commons .

. Без него вам придется перебирать все пары ключ / значение на карте и проверять, когда значение равно «Дравид», тогдаверните ключ.Вот так:

for (Entry<String, String> pair : streetno.entrySet()) {
      if (pair.getValue().equals("Dravid")) {
        System.out.println("Found Dravid at key: " + pair.getKey());
      }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...