Java:
Verwendung von assoziativen Arrays
Wie geht das:
Java verfügt nicht über eingebaute assoziative Arrays wie einige andere Sprachen, stellt aber die Map
Schnittstelle und Klassen wie HashMap
und TreeMap
zur Verfügung, um diese Rolle zu erfüllen. So verwenden Sie eine HashMap
:
import java.util.HashMap;
import java.util.Map;
public class LearnMaps {
public static void main(String[] args) {
// Erstellen einer HashMap
Map<String, Integer> ageOfFriends = new HashMap<>();
// Elemente hinzufügen
ageOfFriends.put("Alice", 24);
ageOfFriends.put("Bob", 30);
ageOfFriends.put("Charlie", 28);
// Elemente zugreifen
System.out.println("Alter von Alice: " + ageOfFriends.get("Alice"));
// Umgang mit nicht vorhandenen Schlüsseln
System.out.println("Alter von jemandem, der nicht in der Map ist: " + ageOfFriends.getOrDefault("Dan", -1));
// Iterieren über Elemente
for (Map.Entry<String, Integer> Eintrag : ageOfFriends.entrySet()) {
System.out.println(Eintrag.getKey() + " ist " + Eintrag.getValue() + " Jahre alt.");
}
}
}
Beispielausgabe:
Alter von Alice: 24
Alter von jemandem, der nicht in der Map ist: -1
Alice ist 24 Jahre alt.
Bob ist 30 Jahre alt.
Charlie ist 28 Jahre alt.
HashMap
ist nur eine Implementierung. Wenn Ihre Schlüssel einzigartig sind und Sie diese sortiert benötigen, sollten Sie TreeMap
in Betracht ziehen. Für eine Map, die die Einfügereihenfolge beibehält, ist LinkedHashMap
Ihr Freund.
Tiefer eintauchen
Maps in Java sind Teil des Collections Frameworks, eingeführt in JDK 1.2, haben aber über die Jahre bedeutende Verbesserungen erfahren, einschließlich der Einführung der forEach
Methode in Java 8 für eine einfachere Iteration über Einträge. Die Wahl der Map-Implementierung (HashMap
, LinkedHashMap
, TreeMap
) sollte von Ihren spezifischen Bedürfnissen in Bezug auf Ordnung und Leistung bestimmt werden. Zum Beispiel bietet HashMap
O(1) Zeitperformance für die grundlegenden Operationen (get und put), vorausgesetzt, die Hashfunktion verteilt die Elemente ordnungsgemäß unter den Buckets. Allerdings, wenn Sie eine Sortierung basierend auf natürlicher Ordnung oder benutzerdefinierten Vergleichsfunktionen benötigen, ist TreeMap
die richtige Wahl und bietet O(log n) Zeit für Einfügung und Suche.
Bevor Map
eingeführt wurde, wurden assoziative Arrays üblicherweise mit zwei parallelen Arrays (eines für Schlüssel, eines für Werte) oder benutzerdefinierten Datenstrukturen mit geringerer Effizienz implementiert. Aktuelle Alternativen zu Map
und seinen Implementierungen könnten Drittanbieter-Bibliotheken beinhalten, die spezialisierte Maps anbieten, wie z. B. bidirektionale Maps (BiMap in Googles Guava-Bibliothek) für Fälle, in denen Sie effizient einen Schlüssel nach seinem Wert finden müssen. Jedoch sind für die meisten Anwendungsfälle in Java die Maps der Standardbibliothek robust und flexibel genug, um die Aufgabe zu bewältigen.