Schabby's Blog
Reserve Orbital Defence Commander
Sep
26.

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.


Trackbacks/Pingbacks

  1. Anonymous

12 Antworten

  1. Rob says:

    Perfekt, genau was ich gesucht habe, danke Mann :)

  2. Alex says:

    solte diese zeile

    System.out.println(name + ": "+ hm.get(name));

    nich wiefolgt lauten:

    System.out.println(name + ": "+ hm.get(value));
    //also + der kontostand

    ?

  3. Alex says:

    also eher "balance" wie oben benutzt wurde statt value

  4. schabby says:

    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

  5. Basti says:

    Hi! Danke für diese zusammenfassung! Basti

  6. balibalo says:

    @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?

  7. Vin says:

    irgendwie ist der Typ-Cast:
    ((Double)hm.get("Rohit")).doubleValue();

    sinfrei... oder ttäusch ich mich da?

  8. schabby says:

    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

  9. Flex says:

    Hi,

    danke für die Zusammenfassung. Hat mir geholfen! Aber ich habe einen Fehler entedeckt.
    Die von Object vorgegebene Funktion für den HashCode heißt nicht hash() sondern hashcode().
    (Siehe http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html)

    Gruß

  10. Adella says:

    Ich bin adella aus dem informatikkurs :)

  11. Skunk says:

    @Adella: Krasser 5hice!

    @topic: Sauberes Beispiel :)

Post Comment

Please notice: Comments are moderated by an Admin.