Parcourir manuellement les valeurs
Dans l'étape précédente, nous avons utilisé la méthode intégrée containsValue()
pour vérifier l'existence d'une valeur. Bien que ce soit la méthode la plus efficace, il est également utile de comprendre comment on pourrait vérifier manuellement l'existence d'une valeur en parcourant toutes les valeurs de la HashMap
. Ce processus consiste à obtenir une collection de toutes les valeurs, puis à les parcourir une par une.
La HashMap
de Java fournit une méthode appelée values()
qui renvoie une vue Collection
des valeurs contenues dans la carte. Nous pouvons ensuite parcourir cette Collection
à l'aide d'une boucle.
Modifions notre programme pour vérifier manuellement si la valeur 25 existe en parcourant les valeurs.
-
Ouvrez le fichier HelloJava.java
dans l'éditeur WebIDE.
-
Remplacez le code existant par le suivant :
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);
}
}
Voici ce qui est nouveau ou a été modifié :
- `import java.util.Collection;` : Nous importons l'interface `Collection` car `ages.values()` renvoie une `Collection`.
- `Collection<Integer> allAges = ages.values();` : Cette ligne obtient une `Collection` contenant toutes les valeurs entières (âges) de notre carte `ages`.
- `for (Integer age : allAges)` : Il s'agit d'une boucle `for` améliorée (également connue sous le nom de boucle `for-each`) qui parcourt chaque élément `Integer` de la collection `allAges`. À chaque itération, la valeur actuelle est assignée à la variable `age`.
- `if (age.equals(valueToCheck))` : À l'intérieur de la boucle, nous comparons l'`age` actuel avec la `valueToCheck`. Nous utilisons `equals()` pour comparer des objets (comme `Integer`), ce qui est généralement plus sûr que d'utiliser `==` pour les objets.
- `foundManually = true;` : Si une correspondance est trouvée, nous définissons `foundManually` sur `true`.
- `break;` : Cette instruction quitte immédiatement la boucle une fois que la valeur est trouvée, rendant la vérification plus efficace.
-
Enregistrez le fichier.
-
Compilez le programme :
javac HelloJava.java
-
Exécutez le programme :
java HelloJava
La sortie devrait être la même que dans l'étape précédente, confirmant que notre vérification manuelle fonctionne correctement.
```plaintext
Does the map contain the value 25 (manual check)? true
Does the map contain the value 40 (manual check)? false
```
Bien que le parcours manuel fonctionne, l'utilisation de containsValue()
est généralement préférée car elle est plus concise et souvent optimisée pour les performances dans la bibliothèque Java. Cependant, comprendre comment parcourir les valeurs est une compétence fondamentale qui sera utile dans de nombreux autres scénarios.