Manuelles Durchlaufen der Werte
Im vorherigen Schritt haben wir die integrierte containsValue()
-Methode verwendet, um auf einen Wert zu prüfen. Dies ist zwar die effizienteste Methode, aber es ist auch hilfreich, zu verstehen, wie man manuell auf einen Wert prüfen kann, indem man alle Werte in der HashMap
durchläuft. Dieser Prozess umfasst das Abrufen einer Sammlung aller Werte und das anschließende nacheinander Durchlaufen dieser Werte.
Java's HashMap
bietet eine Methode namens values()
, die eine Collection
-Ansicht der in der Map enthaltenen Werte zurückgibt. Wir können dann mithilfe einer Schleife über diese Collection
iterieren.
Lassen Sie uns unser Programm ändern, um manuell zu prüfen, ob der Wert 25 vorhanden ist, indem wir die Werte durchlaufen.
-
Öffnen Sie die Datei HelloJava.java
im WebIDE-Editor.
-
Ersetzen Sie den vorhandenen Code durch folgenden:
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);
}
}
Hier ist, was neu oder geändert ist:
import java.util.Collection;
: Wir importieren das Collection
-Interface, weil ages.values()
eine Collection
zurückgibt.
Collection<Integer> allAges = ages.values();
: Diese Zeile ruft eine Collection
ab, die alle ganzzahligen Werte (Alter) aus unserer ages
-Map enthält.
for (Integer age : allAges)
: Dies ist eine erweiterte for-Schleife (auch als for-each-Schleife bekannt), die durch jedes Integer
-Element in der allAges
-Sammlung iteriert. Bei jeder Iteration wird der aktuelle Wert der age
-Variable zugewiesen.
if (age.equals(valueToCheck))
: Innerhalb der Schleife vergleichen wir das aktuelle age
mit dem valueToCheck
. Wir verwenden equals()
zum Vergleichen von Objekten (wie Integer
), was im Allgemeinen sicherer ist als der Einsatz von ==
für Objekte.
foundManually = true;
: Wenn eine Übereinstimmung gefunden wird, setzen wir foundManually
auf true
.
break;
: Diese Anweisung beendet die Schleife sofort, sobald der Wert gefunden wird, was die Prüfung effizienter macht.
-
Speichern Sie die Datei.
-
Kompilieren Sie das Programm:
javac HelloJava.java
-
Führen Sie das Programm aus:
java HelloJava
Die Ausgabe sollte die gleiche wie im vorherigen Schritt sein, was bestätigt, dass unsere manuelle Prüfung korrekt funktioniert.
Does the map contain the value 25 (manual check)? true
Does the map contain the value 40 (manual check)? false
Obwohl das manuelle Durchlaufen funktioniert, wird die Verwendung von containsValue()
im Allgemeinen bevorzugt, da es kompakter ist und oft im Java-Bibliothek für die Leistung optimiert ist. Das Verständnis, wie man durch Werte iteriert, ist jedoch eine grundlegende Fähigkeit, die in vielen anderen Szenarien nützlich sein wird.