Guten Tag,
mit HashMaps würde ich mich gerne besser auskennen. Vielleicht klärt mich jemand auf.
Schon jetzt vielen Dank dafür.
Laut API Doku besteht eine HashMap aus key-value Paaren, was (wohl) eindeutig jeweils ZWEI "Teile" sind.
Wenn in der Klasse Tag equals() und auch hashCode überschrieben wird, dann
ist die mit size() geprüfte Anzahl der key-value Paare geringer, als die Anzahl der Hinzufügungen über die put Anweisung.
DEAKTIVIERE ich die equals() und hashCode Überschreibung sind es 6 (soviel wie put Anweisungen)
Es verlockt zu glauben, dass da Cluster (=Anhäufungen) entstehen bei bestimmten einzelnen keys.
Denn das ist bei hash Tabellen üblich. Ich denke so eine hash Tabelle ist eine zur konkreten HashMap übergeordnet (paralell) existierende Verwaltungstabelle, eben eine andere.
Im Beispiel sind die keys jeweils Objekte und die haben einen hashCode und einige bekommen den gleichen hashCode
Aber dennoch sieht es so aus, als ob KEINE Cluster entstehen, sondern durch Überschreibung ein key-value Paar gelöscht wird, wenn ein key-value Paar dazu kommt und das key Objekt (hier Tag) davon ein gleiches, also bereits vorhandenes ist.
Oder wie funktioniert das?
mit HashMaps würde ich mich gerne besser auskennen. Vielleicht klärt mich jemand auf.
Schon jetzt vielen Dank dafür.
Laut API Doku besteht eine HashMap aus key-value Paaren, was (wohl) eindeutig jeweils ZWEI "Teile" sind.
Wenn in der Klasse Tag equals() und auch hashCode überschrieben wird, dann
ist die mit size() geprüfte Anzahl der key-value Paare geringer, als die Anzahl der Hinzufügungen über die put Anweisung.
DEAKTIVIERE ich die equals() und hashCode Überschreibung sind es 6 (soviel wie put Anweisungen)
Es verlockt zu glauben, dass da Cluster (=Anhäufungen) entstehen bei bestimmten einzelnen keys.
Denn das ist bei hash Tabellen üblich. Ich denke so eine hash Tabelle ist eine zur konkreten HashMap übergeordnet (paralell) existierende Verwaltungstabelle, eben eine andere.
Im Beispiel sind die keys jeweils Objekte und die haben einen hashCode und einige bekommen den gleichen hashCode
Aber dennoch sieht es so aus, als ob KEINE Cluster entstehen, sondern durch Überschreibung ein key-value Paar gelöscht wird, wenn ein key-value Paar dazu kommt und das key Objekt (hier Tag) davon ein gleiches, also bereits vorhandenes ist.
Oder wie funktioniert das?
Java:
import java.util.Iterator;
import java.util.HashMap;
import java.util.*;
class Tag{
String day;
Tag(String d) { day = d; }
/*public boolean equals(Object o) {
return ((Tag)o).day == this.day;
}
public int hashCode(){ // uneffiziente hashCode()
return day.length();
}*/
}
class HashMapTest1{
public static void main(String[] args){
Map<Tag, String> hmp1 = new HashMap<Tag, String>();
Tag t1 = new Tag("Monday"); // hc 6
Tag t2 = new Tag("Monday"); // hc 6
Tag t3 = new Tag("Tuesday");// hc 7
Tag t4 = new Tag("Montag"); // hc 6
Tag t5 = new Tag("Monday"); // hc 6
Tag t6 = new Tag("Donnerstag"); // hc 10
hmp1.put(t6, "donnern");
hmp1.put(t3, "dienen");
hmp1.put(t4, "mal ausschlafen");
hmp1.put(t5, "blau machen");
hmp1.put(t1, "nicht zum Friseur");
hmp1.put(t2, "gesund frühstücken");
System.out.println(" Groesse der hashMap (Anzahl der key-value Paare) ist nun : "+hmp1.size());System.out.println();
Set<Map.Entry<Tag, String>> entrySet = hmp1.entrySet();
for (Map.Entry<Tag, String> anEntry : entrySet)
{
System.out.println(" X--> "+anEntry);
}
}
}
Zuletzt bearbeitet von einem Moderator: