Introdução
Neste laboratório, você aprenderá como verificar se um valor específico existe dentro de um HashMap em Java. Exploraremos o conveniente método containsValue() fornecido pela classe HashMap, que determina eficientemente se um valor está presente.
Além disso, examinaremos como iterar manualmente pelos valores do mapa para realizar a verificação, fornecendo uma abordagem alternativa. Finalmente, discutiremos como lidar com valores nulos ao verificar sua presença dentro do mapa.
Usar containsValue() para Verificação de Valor
Nesta etapa, exploraremos como verificar se um valor específico existe dentro de um HashMap em Java. HashMap é uma estrutura de dados muito útil que armazena pares chave-valor. Às vezes, você pode precisar saber se um valor específico está presente no mapa, independentemente de sua chave.
A classe HashMap do Java fornece um método conveniente chamado containsValue() para essa finalidade. Este método recebe um valor como argumento e retorna true se o mapa contiver pelo menos um mapeamento chave-valor onde o valor é igual ao valor especificado. Caso contrário, ele retorna false.
Vamos criar um programa Java simples para demonstrar como usar containsValue().
Abra o arquivo
HelloJava.javano editor WebIDE, caso ele ainda não esteja aberto.Substitua todo o conteúdo do arquivo pelo seguinte código:
import java.util.HashMap; public class HelloJava { public static void main(String[] args) { // Create a HashMap HashMap<String, Integer> ages = new HashMap<>(); // Add some key-value pairs ages.put("Alice", 30); ages.put("Bob", 25); ages.put("Charlie", 35); ages.put("David", 25); // Another person with age 25 // Check if a specific value exists int valueToCheck = 25; boolean contains25 = ages.containsValue(valueToCheck); System.out.println("Does the map contain the value " + valueToCheck + "? " + contains25); valueToCheck = 40; boolean contains40 = ages.containsValue(valueToCheck); System.out.println("Does the map contain the value " + valueToCheck + "? " + contains40); } }Vamos analisar as novas partes deste código:
import java.util.HashMap;: Esta linha importa a classeHashMap, que precisamos usar.HashMap<String, Integer> ages = new HashMap<>();: Esta linha cria um novoHashMaponde as chaves sãoString(como nomes) e os valores sãoInteger(como idades).ages.put("Alice", 30);e linhas semelhantes: Estas linhas adicionam pares chave-valor aoHashMap.int valueToCheck = 25;: Isso declara uma variável inteiravalueToChecke atribui a ela o valor 25.boolean contains25 = ages.containsValue(valueToCheck);: É aqui que usamos o métodocontainsValue(). Ele verifica se o valor armazenado emvalueToCheck(que é 25) existe em qualquer lugar nos valores do mapaages. O resultado (trueoufalse) é armazenado na variável booleanacontains25.System.out.println(...): Estas linhas imprimem os resultados no console.
Salve o arquivo (Ctrl+S ou Cmd+S).
Compile o programa no Terminal:
javac HelloJava.javaSe não houver erros, um arquivo
HelloJava.classserá criado.Execute o programa compilado:
java HelloJavaVocê deve ver a saída indicando se os valores 25 e 40 estão presentes no mapa.
Does the map contain the value 25? true Does the map contain the value 40? false
Isso demonstra como você pode verificar facilmente a existência de um valor em um HashMap usando o método containsValue().
Iterar Manualmente Pelos Valores
Na etapa anterior, usamos o método embutido containsValue() para verificar um valor. Embora esta seja a maneira mais eficiente, também é útil entender como você pode verificar manualmente um valor iterando por todos os valores no HashMap. Este processo envolve obter uma coleção de todos os valores e, em seguida, iterar por eles um por um.
O HashMap do Java fornece um método chamado values() que retorna uma visão Collection dos valores contidos no mapa. Podemos então iterar sobre esta Collection usando um loop.
Vamos modificar nosso programa para verificar manualmente se o valor 25 existe, iterando pelos valores.
Abra o arquivo
HelloJava.javano editor WebIDE.Substitua o código existente pelo seguinte:
import java.util.HashMap; import java.util.Collection; public class HelloJava { public static void main(String[] args) { // Create a HashMap HashMap<String, Integer> ages = new HashMap<>(); // Add some key-value pairs ages.put("Alice", 30); ages.put("Bob", 25); ages.put("Charlie", 35); ages.put("David", 25); // Another person with age 25 // Get a collection of all values Collection<Integer> allAges = ages.values(); // Manually check if a specific value exists by looping int valueToCheck = 25; boolean foundManually = false; for (Integer age : allAges) { if (age.equals(valueToCheck)) { foundManually = true; break; // Exit the loop once the value is found } } System.out.println("Does the map contain the value " + valueToCheck + " (manual check)? " + foundManually); valueToCheck = 40; foundManually = false; // Reset for the next check for (Integer age : allAges) { if (age.equals(valueToCheck)) { foundManually = true; break; } } System.out.println("Does the map contain the value " + valueToCheck + " (manual check)? " + foundManually); } }Aqui está o que é novo ou foi alterado:
import java.util.Collection;: Importamos a interfaceCollectionporqueages.values()retorna umaCollection.Collection<Integer> allAges = ages.values();: Esta linha obtém umaCollectioncontendo todos os valores inteiros (idades) do nosso mapaages.for (Integer age : allAges): Este é um loop for aprimorado (também conhecido como loop for-each) que itera por cada elementoIntegerna coleçãoallAges. Em cada iteração, o valor atual é atribuído à variávelage.if (age.equals(valueToCheck)): Dentro do loop, comparamos aageatual com ovalueToCheck. Usamosequals()para comparar objetos (comoInteger), o que é geralmente mais seguro do que usar==para objetos.foundManually = true;: Se uma correspondência for encontrada, definimosfoundManuallycomotrue.break;: Esta instrução sai do loop imediatamente assim que o valor é encontrado, tornando a verificação mais eficiente.
Salve o arquivo.
Compile o programa:
javac HelloJava.javaExecute o programa:
java HelloJavaA saída deve ser a mesma da etapa anterior, confirmando que nossa verificação manual funciona corretamente.
Does the map contain the value 25 (manual check)? true Does the map contain the value 40 (manual check)? false
Embora a iteração manual funcione, usar containsValue() é geralmente preferível porque é mais conciso e, muitas vezes, otimizado para desempenho dentro da biblioteca Java. No entanto, entender como iterar pelos valores é uma habilidade fundamental que será útil em muitos outros cenários.
Lidar com Valores Nulos
Em Java, null é um valor especial que significa "nenhum objeto". É importante entender como o HashMap lida com valores null e como containsValue() se comporta ao lidar com null.
Um HashMap em Java pode armazenar valores null. Você pode adicionar um mapeamento onde o valor é null.
Vamos modificar nosso programa para incluir um valor null e ver como containsValue() funciona com ele.
Abra o arquivo
HelloJava.javano editor WebIDE.Substitua o código existente pelo seguinte:
import java.util.HashMap; public class HelloJava { public static void main(String[] args) { // Create a HashMap HashMap<String, Integer> ages = new HashMap<>(); // Add some key-value pairs, including a null value ages.put("Alice", 30); ages.put("Bob", 25); ages.put("Charlie", null); // Charlie's age is unknown (null) ages.put("David", 25); // Check if a specific value exists, including null int valueToCheck = 25; boolean contains25 = ages.containsValue(valueToCheck); System.out.println("Does the map contain the value " + valueToCheck + "? " + contains25); Integer nullValue = null; boolean containsNull = ages.containsValue(nullValue); System.out.println("Does the map contain the value null? " + containsNull); valueToCheck = 40; boolean contains40 = ages.containsValue(valueToCheck); System.out.println("Does the map contain the value " + valueToCheck + "? " + contains40); } }Aqui está a principal mudança:
ages.put("Charlie", null);: Adicionamos um mapeamento onde a chave "Charlie" está associada a um valornull.Integer nullValue = null;: Criamos uma variávelIntegere atribuímos a ela o valornull.boolean containsNull = ages.containsValue(nullValue);: UsamoscontainsValue()para verificar se o mapa contém o valornull.
Salve o arquivo.
Compile o programa:
javac HelloJava.javaExecute o programa:
java HelloJavaObserve a saída, especialmente a linha que verifica
null.Does the map contain the value 25? true Does the map contain the value null? true Does the map contain the value 40? false
Como você pode ver, containsValue() identifica corretamente que o HashMap contém o valor null porque o adicionamos explicitamente. Isso confirma que o HashMap pode armazenar valores null e que containsValue() pode ser usado para verificar sua presença.
Lidar com valores null é um aspecto importante da programação Java. Esteja sempre atento se suas estruturas de dados podem conter null e como seu código se comportará nesses casos.
Resumo
Neste laboratório, aprendemos como verificar se um HashMap contém um valor específico em Java. O método principal explorado foi containsValue(), que fornece uma maneira direta de determinar a presença de um valor dentro do mapa. Vimos como usar este método com um exemplo simples, demonstrando seu valor de retorno com base na existência ou não do valor alvo no mapa.
Também exploramos métodos alternativos para verificar a existência de valores, como iterar manualmente pelos valores do mapa. Além disso, o laboratório abordou como lidar com valores nulos ao verificar sua presença no mapa, garantindo uma compreensão abrangente da verificação de valores em HashMap.



