In diesem Post widme ich mich kurz der HashMap und ihren Eigenschaften. Folgende Fragegestellungen werden angesprochen:
- HashMap in Java
- HashMap Beispiel
- Unterschied HashMap zu Hashtable
- Assoziatives Array in Java
Eine HashMap dient zum speichern von Key-Value (Schlüssel-Wert) Paaren. Das heisst man gibt einen Schlüssel an und kann zu diesem Schlüssel einen Wert abspeichern und zu genau diesem Schlüssel auch den Wert wieder aus der HashMap herausholen. Ein Schlüssel kann ein beliebiges Objekt sein und ist meist eine Object Id, Speicheradresse oder ein String. Wichtig ist jedoch, dass ein Schlüssel eindeutig ist, sodass niemals ein Schlüssel für zwei Werte exisitiert.
Technisch funktioniert die HashMap so, dass aus dem Schlüssel ein Hash-Wert berechnet wird der als Adresse in einer Tabelle dient wo der Wert abgespeichert wird. Das berechnen eines solchen Hashs ist nicht immer leicht, aber Java bietet standardmäßig ein recht solides Verfahren für die meisten primitiven Datentypen (die Methode hash() in Object dient genau dazu und wird in String etc. überschrieben). Eine gute Einführung in Hashwerte kann auf der Wikipedia nachgelesen werden.
Im folgenden wird ein kurzes Beispiel eine HashMap gezeigt:
import java.util.*; public class HashMapDemo { public static void main(String[] args) { HashMap<String, Double> hm = new HashMap<String, Double>(); hm.put("Rohit", new Double(3434.34)); hm.put("Mohit", new Double(123.22)); hm.put("Ashish", new Double(1200.34)); hm.put("Khariwal", new Double(99.34)); hm.put("Pankaj", new Double(-19.34)); for( String name: hm.keySet() ) { System.out.println(name + ": "+ hm.get(name)); } // Rohit's um 1000 erhoehen double balance = ((Double)hm.get("Rohit")).doubleValue(); hm.put("Rohit", new Double(balance + 1000)); System.out.println("Rohits neuer Kontostand : " + hm.get("Rohit")); } }
Die Ausgabe ist wie folgt:
Rohit : 3434.34 Ashish : 1200.34 Pankaj : -19.34 Mohit : 123.22 Khariwal : 99.34 Rohit new balance : 4434.34
Der Unteschied zwischen einer HashMap und einer Hashtable ist marginal. Beide bieten die selbe Funktionalität. Der Unterschied ist lediglich, dass Hashtables synchronized sind und daher unter Umständen etwas langsamer sind als HashMaps.

Perfekt, genau was ich gesucht habe, danke Mann
solte diese zeile
System.out.println(name + “: “+ hm.get(name));
nich wiefolgt lauten:
System.out.println(name + “: “+ hm.get(value));
//also + der kontostand
?
also eher “balance” wie oben benutzt wurde statt value
Hi Alex,
hilf mir bitte kurz auf die Sprünge, was Du genau meinst
Syntaktisch ist System.out.println(name + “: “+ hm.get(value)); korrekt. Das ‘+’ dient ja in dieser Zeile dazu den String zusammenzusetzen und nicht die Balance zu addieren.
Hilft Dir das weiter oder habe ich Deine Frage nicht kapiert?
Viele Grüße
Johannes
Hi! Danke für diese zusammenfassung! Basti
@alex:
die get() Methode von HashMap nimmt eine “Schlussel” als Parameter und gibt eine “Wert” zurück.
Hier sind alle Schlussel in ein Set gespeichert durch keySet() und dann für jede Schlussel (die “name” heisst) wird diese Schlussel (name) und ihre Wert (get(name)) gedruckt.
“value” oder “balance” hat damit nix zu tun. Ist es schon klar?
irgendwie ist der Typ-Cast:
((Double)hm.get(“Rohit”)).doubleValue();
sinfrei… oder ttäusch ich mich da?
Hi,
ja, Du hast Recht, es ist nicht wirklich nötig. Ich habe gerade folgendes ausprobiert:
Double d1 = 0.312d;
double d2 = d1;
und ja, Java macht natürlich ein automatisches “unboxing” in den primitiven Typ.
VG, Johannes