[RESOLVIDO] HashMap

Oi pessoALL!

Estou usando HashMap.
Qdo quero pegar o valor de uma chave, faço assim:

minhaHash.get(chave);

Eu precisava agora pegar a chave de um valor… mas e ai? Como fazer?! No máximo eu tô conseguindo verificar se o valor existe usando:

minhaHash.containsValue(valor);

Alguém tem alguma dica?! Eu já cansei de fuçar na API :cry:

Olá,

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.

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

public class Teste {
	
	public static void main(String[] args) {
		Map<String, String> teste = new HashMap<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 mapa
		for (Entry<String, String> entrada : teste.entrySet()) {
			// verifica se o valor procurado é igual ao valor da entrada
			if ("V3".equals(entrada.getValue())) {
				// se for imprime a chave do objeto
				System.out.println(entrada.getKey());
			}
		}
	}
}

Espero ter ajudado.

Atenciosamente,

Alexandre Fidélis Vieira Bitencourt

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();

List<String> minhaLista = new ArrayList<String>(minhaHash.values());
String valor = minhaLista.get(minhaLista.indexOf(valor));

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.

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:

HashMap<Component, Integer> HashMap<Integer, Component>

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.

Obrigada mais uma vez!!! :wink: