Uma forma de realizar tal operação é utilizar o método entrySet() para obter um Set com as entradas do map e percorrer esse set verificando se o valor procurado está na entrada. Vale lembrar que várias chaves do mapa podem conter o mesmo valor e neste caso irá encontrar mais de uma chave que possua o valor.
O código abaixo ilustra como fazer isso no Java 5 ou superior. No java 1.4 pode-se utilizar o Iterator do entrySet e proceder de forma análoga.
importjava.util.HashMap;importjava.util.Map;importjava.util.Map.Entry;publicclassTeste{publicstaticvoidmain(String[]args){Map<String,String>teste=newHashMap<String,String>();teste.put("Teste","V1");teste.put("Teste2","V2");teste.put("Teste3","V3");teste.put("Teste4","V4");teste.put("Teste5","V5");// percorre o set de entradas do mapafor(Entry<String,String>entrada:teste.entrySet()){// verifica se o valor procurado é igual ao valor da entradaif("V3".equals(entrada.getValue())){// se for imprime a chave do objetoSystem.out.println(entrada.getKey());}}}}
Espero ter ajudado.
Atenciosamente,
Alexandre Fidélis Vieira Bitencourt
xjcd
Renata a minha dica é você usar o List para fazer isso, o mapa tem um metodo chamado .vales() que você pode criar uma ArrayList passando resultado do .values();
Agora você tem que ter cuidado com o retorno do método indexOf, pois se vier menor que zero é porque o valor não existe dentro da sua coleção de valores, antes de usar o get() do ArrayList testa se é maior ou igual a zero.
Espero ter ajduado.
RenataFA
Pessoal, obrigada pelas respostas.
No meu caso, estou priorizando o uso de Hash pq preciso de performace.
Então, no fim das contas, encontramos um artigo que explicava que a melhor alternativa pra performace nesse caso é usar duas Hashs. Entao eu tenho o seguinte:
Quando eu adiciono o conteúdo em uma, eu tb. adiciono na outra, e desta forma posso tanto pegar o Integer tendo o Component como pegar o Component tendo o Integer.