Настройка:
final Object sentinal = new Object();
Map<String, Object> map = new HashMap<String, Object>(){{
put("key1", new Object());
put("key2", sentinal);
}};
По заданному ключу найдите значение (поиск):
System.out.println(map.get("key2") == sentinal);
По заданному значению найдите его ключ (обратный поиск):
for(Map.Entry<String, Object> entry : map.entrySet()){
if(entry.getValue() == sentinal){
System.out.println(entry.getKey());
}
}
... хотя, если мне нужно регулярно выполнять обратный поиск, я обычно строю обратную карту:
Map<Object, String> reverse = new HashMap<Object, String>();
for(Map.Entry<String, Object> entry : map.entrySet()){
reverse.put(entry.getValue(), entry.getKey());
}
System.out.println(reverse.get(sentinal));