Как hashmap по значению найти ключ
Имеется hashmap, как можно по значению найти ключ?
Имеется hashmap, как можно по значению найти ключ?
Во-первых, ключей для одного и того же значения может быть множество.
Во-вторых, если у вас никаких других данных нет, вам ничего не остаётся как просто итерировать по хэшу и смотреть, подходит вам этот ключ или нет.
public static void processMap(Map mp) {
Iterator it = mp.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
if (pair.getValue() == '...') {
System.out.println("Found: " + pair.getKey() + " = " + pair.getValue());
}
it.remove(); // дабы не было ConcurrentModificationException
}
}
В данном случае я прохожу по хэшу и как только значение равно ...
,
я вывожу его на стандартный поток вывода. Вы делаете в данном случае ваши действия с найденным значением.
Другой способ пройтись по хэшу:
for (Map.Entry<String, Object> entry : map.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
// ...
}
В JDK нет поддержки двунаправленных Map
, поэтому только самому костылить что то вроде этого:
public K getKeytoValue (Map map ,V someValue){
for(Entry entry: map.entrySet()) {
if (entry.getValue().equals(someValue)) return entry.getKey();
}
return null;
}
где: K
- тип объекта ключа , V
- тип объекта значения , someValue
- значение, для которого нужно найти ключ.
если одинаковых значений несколько , то будет возвращен ключ , естественно , только первого.