Zum Hauptinhalt springen

Assoziativspeicher (Maps)

Unter einem Assoziativspeicher (Map) versteht man eine Menge zusammengehöriger Paare von Objekten. Das erste Objekt stellt dabei den Schlüssel (Key), das zweite Objekt den Wert (Value) dar. Jeder Schlüssel kann dabei nur einmal in einem Assoziativspeicher vorhanden sein. Aufgrund dieses Aufbaus werden Assoziativspeicher auch als Wörterbücher bezeichnet.

Um auf die Einträge, Schlüssel und Werte eines Assoziativspeichers zugreifen können, stellt die Schnittstelle Map die Methoden Set<Entry<K, V>> entrySet(), Set<K> keySet() und Collection<V> values() zur Verfügung.

MainClass.java
public class MainClass {

public static void main(String[] args) {

Map<Integer, String> persons = new HashMap<>();
persons.put(829134, "Hans");
persons.put(209769, "Peter");
persons.put(723871, "Lisa");

for (Entry<Integer, String> entry : persons.entrySet()) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}

for (Integer id : persons.keySet()) {
System.out.println(id);
}

for (String name : persons.values()) {
System.out.println(name);
}

}

}

Die Klasse HashMap<K, V> implementiert den Assoziativspeicher in Form einer Hashtabelle. Für den Einsatz einer Hashtabelle ist es zwingend erforderlich, dass die Klasse, die den Schlüssel bildet, die Methoden int hashCode() und boolean equals(object: Object) gemäß den entsprechenden Dokumentationskommentaren überschrieben hat. Im Gegensatz zu einem Binärbaum liegen die Paare in einer Hashtabelle unsortiert vor.

IndexSchlüsselWert
0Hans2.3
2Peter1.7
13Lisa1.8
14Max4.2

Die Klasse TreeMap<K, V> implementiert den Assoziativspeicher in Form eines Binärbaumes. Als Datenstruktur wird dabei ein balancierter Baum verwendet, d.h. spezielle Einfüge- und Löschoperationen stellen sicher, dass der Baum nicht zu einer linearen Liste entartet. Da die Paare in einem Binärbaum sortiert vorliegen, ist es für den Einsatz zwingend erforderlich, dass die Klasse, die den Schlüssel bildet, die Schnittstelle Comparable<T> implementiert hat. Alternativ kann dem Konstruktor der Klasse TreeMap<K, V> ein Komparator für den Schlüssel mitgegeben werden.