HashMap keySuche

fco

Mitglied
Hallo Java Freunde,

wieder einmal brauche ich eure Hilfe.

ein Java Programm erzeugt ein Key->Value in Form ein HashMap<String,HtmlAnchor>. Nach jeder durchlauf wird geguckt ob in der Hashmap diese key existiert. Bei etwa 20.000 elementen wird der suche natürlich sehr langsam.

was kann man dagegen machen? gibt andere Mehtoden?


vielen Dank im Voraus
 

nrg

Top Contributor
also 20.000 elemente sollten da jetzt kein problem darstellen. was meinst du mit "nach jedem durchlauf"?
 

tfa

Top Contributor
Wenn man weiß, dass man viele Objekte in der Tabelle abspeichern will, sollte man gleich die Anfangsgröße entsprechend wählen ( z.B. 27000 bei 20000 Einträgen). Das Reshashing.
 

Dekker

Bekanntes Mitglied
Wenn man weiß, dass man viele Objekte in der Tabelle abspeichern will, sollte man gleich die Anfangsgröße entsprechend wählen ( z.B. 27000 bei 20000 Einträgen). Das Reshashing.

Hat ja jetzt wenig mit dem suchen zu tun. Beim einfügen und löschen ist das interessant. Ich denke allgemein wäre es interessant zu wissen was du mit einem Durchlauf meinst. Außerdem wäre es interessant zu wissen ob du eine eigene Hashfunktion benutzt etc pp. Wenn diese nicht stark genug kollisionsresistent ist, degeneriert eine Hashtabelle irgendwann zu einer Liste da der Probingalgorithmus dann oft lange suchen muss bis er den richtigen Eintrag hat.
 

Andi_CH

Top Contributor
Was heisst lange? Bei 2'000'000 Einträgen braucht nicht einmal mein searchDoof spürbar Zeit
und hm.containsKey(key) ist ja sicher schneller :)
(Hm - ich glaub es ist Zeit für die Mittagspause, sonst komme ich auf noch doofere Ideen)

Java:
	private static void searchDoof(String key) {
		// doofere als doofe Variante
		String antwort = "Ist nicht drin";
		for(String s : hm.keySet()) {
			if(s.equals(key)) {
				antwort = "Ist drin";
			}
		}
		System.out.println(antwort);
	}
 

fco

Mitglied
vielen Dank für die rasche Antwort. die funktion siehr so aus.

Java:
//hier wird alle anchors aus eine HTML Datei ausgelesen//
TreeMap<String,HtmlAnchor> anchorListe=crawler.getAnchorListe();
for(String key:anchorListe.keySet()){
	HtmlAnchor anchor=anchorListe.get(key);
             //hier wird nach vorhandene anchors in der cache gesucht.
             String key=new MD5().md5(anchor.asXml());
	if(_cache.containsKey(key)){
	    this._cache.put(key, anchor);
	}
}

diese Funktion wird rekursive aufgerufen.
 

Der Müde Joe

Top Contributor
Java:
for(String key:anchorListe.keySet()){
    HtmlAnchor anchor=anchorListe.get(key);

Das macht keinen Sinn. Iteriere über das EntrySet.

containsKey und put ist linearer aufwand.

Aber wenn du über 20'000 Einträge iterierst und dann noch rekursiv ein paar mal....

EDIT:
ach ja..TreeMap wäre übrigens
This implementation provides guaranteed log(n) time cost for the containsKey, get, put and remove operations
 
S

SlaterB

Gast
der Code ist so wie er ist gut, jedenfalls hinsichtlich Map-Durchlauf und Key-Prüfung,
eine MD5-Berechnung dauert vielleicht länger als die 20.000 Keys zu durchlaufen,
na gut, das wohl nicht, aber von dem Code macht MD5 doch sicher 95% der Zeit aus,
wenn Zeile 7-9 auskommentiert werden, dauert das ganze dann nicht noch genauso lange?

Rekursion ist nicht zu erkennen

----

edit:
ein Key einer Map, den man erst jedesmal aufwending mit MD5 berechnen muss, ist vielleicht für sich diskussionswürdig,
die HashMap kann doch gerade den HashCode eines Strings ausrechnen, reicht das nicht?
ist vielleicht schneller als erst MD5 und dann HashCode?
um Platz musst du dir keine Sorgen machen, jeder Key ist nur 4 Byte, eine Referenz auf den Arbeitspeicher,
die langen XML-Strings sind sowieso im gespeicherten Anchor vorhanden, oder erstellt .asXml() diese erst?

edit:
werden die Keys der anchorListe (= eine Map??) überhaupt benötigt? wenn es dieselben wie für _cache sind, dann direkt verwenden statt neu auszurechnen?
wenn nicht benötigt, kann in der Tat diese Schleife geändert werden, nur über die values() iterieren,
über das EntrySet zu iterieren und dort die Keys + Values rauszuholen ist dagegen eher unschön zu schreiben, muss nicht unbedingt sein
 
Zuletzt bearbeitet von einem Moderator:

fco

Mitglied
ich kann das leider nicht bestätigen. Da am anfang die durchläufe sehr schnell gehen, aber mit der zeit wird die durchläufe immer langsamer. Ich muß noch viel lernen :rtfm:
 
S

SlaterB

Gast
> ich kann das ledier nicht bestätigen.
bezieht sich das auf meine Frage zur Laufzeit mit Auskommentieren?
dann ist die Antwort nicht sehr hilfreich, meinst du dass es schneller wird (was doch auf ein Problem mit der Key-Suche hindeuten würde), dass sich die Zeit nicht ändert, dass du den Code nicht ändern kannst oder einfach nicht weißt was ich meine bzw. die Messung zu schwer umzusetzen ist? na auch nicht wichtig ;)

ich hab in mein letztes Posting noch zwei edits eingebaut, falls interessiert
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S HashMap mehrere Keys zu einem Value Java Basics - Anfänger-Themen 3
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
T HashMap Lsite gibt die sachen nicht aus wie gewollt. Java Basics - Anfänger-Themen 3
krgewb HashMap Java Basics - Anfänger-Themen 2
B Hashmap richtig bauen, die Tripel auf Zahl abbildet? Java Basics - Anfänger-Themen 10
"java.util.HashMap.get(Object)" is null Java Basics - Anfänger-Themen 10
berserkerdq2 Hashmap, wie prüfe ich ob ein Key schon existiert Java Basics - Anfänger-Themen 19
S Durch HashMap iterieren Java Basics - Anfänger-Themen 8
rafi072001 Sortieren einer HashMap nach Values Java Basics - Anfänger-Themen 2
F gson mit einer Hashmap Java Basics - Anfänger-Themen 2
J JSON-HashMap Java Basics - Anfänger-Themen 3
J Hashmap Java Basics - Anfänger-Themen 13
C Hashmap zickt Java Basics - Anfänger-Themen 9
S HashMap contains() Methode Java Basics - Anfänger-Themen 1
Z Satz aufteilen und die Wörter zählen (HashMap) Java Basics - Anfänger-Themen 15
N enum Attribut von Objekten einer Hashmap ausgeben Java Basics - Anfänger-Themen 6
P Verschachtelte Hashmap Java Basics - Anfänger-Themen 6
I Sortiert eine HashMap nicht gleich wie eine ArrayList? Java Basics - Anfänger-Themen 1
B HashMap alphabetisch sortieren Java Basics - Anfänger-Themen 2
J HashMap Java Basics - Anfänger-Themen 6
M Enum-Variable HashMap zuweisen Java Basics - Anfänger-Themen 5
U Hashmap Iterator selbst implementieren Java Basics - Anfänger-Themen 10
N HashMap in List good practice? Java Basics - Anfänger-Themen 2
K Value eines HashMaps in einer HashMap wiedergeben. Java Basics - Anfänger-Themen 5
O Hashmap, ArrayList, LinkedList Java Basics - Anfänger-Themen 7
O HashMap - ArrayList Java Basics - Anfänger-Themen 29
J Hashmap langsamer als compareTo? Java Basics - Anfänger-Themen 23
E HashMap+Vererbung Java Basics - Anfänger-Themen 11
J Erhöhen eines Values als Integer bei gleichen Keys in HashMap Java Basics - Anfänger-Themen 12
N Methoden HashMap interne Werte miteinander vergleichen Java Basics - Anfänger-Themen 7
W The type Long is not visible HashMap Java Basics - Anfänger-Themen 4
M Objekt mit Hashmap vergleichen Java Basics - Anfänger-Themen 22
S Gibt es für die Klasse HashMap Generic Implementierungen? Java Basics - Anfänger-Themen 11
C HashMap - alle keys haben values der letzten put-Anweisung Java Basics - Anfänger-Themen 3
J Hashmap auslesen Java Basics - Anfänger-Themen 7
F HashMap sortieren <String, Long> Java Basics - Anfänger-Themen 3
GreenTeaYT HashMap dupliziert meine Elemente? Java Basics - Anfänger-Themen 2
shiroX Methoden Morse-Code Übersetzer mit HashMap Java Basics - Anfänger-Themen 5
E HashMap Problem Java Basics - Anfänger-Themen 5
P Hashmap anstatt LinkedList? Java Basics - Anfänger-Themen 6
T HashMap und die Methoden Java Basics - Anfänger-Themen 13
N Methoden Interaktives PDF mit HashMap befüllen Java Basics - Anfänger-Themen 0
Z Hashmap auseinandernehmen und analysieren Java Basics - Anfänger-Themen 7
B Durchlaufen von Hashmap und Arraylist Java Basics - Anfänger-Themen 8
F HashMap oder welches Array? Java Basics - Anfänger-Themen 4
T HashMap Java Basics - Anfänger-Themen 24
L Hashmap mit variablem Key Java Basics - Anfänger-Themen 9
M Collections Probleme mit Hashmap Java Basics - Anfänger-Themen 4
N Collections String in HashMap umwandeln Java Basics - Anfänger-Themen 3
Z HashMap richtig benutzen Java Basics - Anfänger-Themen 2
lgund HashMap // TS3 Query Java Basics - Anfänger-Themen 7
Z Hashmap Iterator löscht nicht Java Basics - Anfänger-Themen 8
E Hashmap Wert auslesen Java Basics - Anfänger-Themen 2
S Printstream für einen Hashmap Loop Java Basics - Anfänger-Themen 1
dat_vin OOP Hashmap und Attribute Java Basics - Anfänger-Themen 7
C Check ob eine HashMap schon existiert Java Basics - Anfänger-Themen 16
P Vererbung Eigene HashMap Variante Java Basics - Anfänger-Themen 2
R Hashmap in anderer Klasse nicht benutzbar Java Basics - Anfänger-Themen 1
T Java Hashmap Java Basics - Anfänger-Themen 3
L Gibt es etwas wie "HashMap <String, String, String> Java Basics - Anfänger-Themen 9
K HashMap mit Daten aus ArrayList befüllen Java Basics - Anfänger-Themen 14
S OOP Klasse mit static-Eigenschaften - HashMap füllen Java Basics - Anfänger-Themen 6
O HashMap Fragen Java Basics - Anfänger-Themen 8
T HashMap Werte einfügen, durchsuchen und auslesen Java Basics - Anfänger-Themen 17
M Semantisches Problem HashMap/Netzwerk Java Basics - Anfänger-Themen 4
D HashMap Keys durchlaufen Java Basics - Anfänger-Themen 2
B Zugriff auf csv-Datei per hashmap Java Basics - Anfänger-Themen 5
M HashMap keys ausgeben Java Basics - Anfänger-Themen 2
S In einer Hashmap Klassen regestrieren Java Basics - Anfänger-Themen 2
H Collections Was ist schneller - HashMap + Sort v TreeMap? Java Basics - Anfänger-Themen 75
F HashMap nach kleinstem Value durchsuchen Java Basics - Anfänger-Themen 11
G HashMap Java Basics - Anfänger-Themen 6
F Wortpaare - HashMap - ArrayList Java Basics - Anfänger-Themen 6
M HashMap Frage Java Basics - Anfänger-Themen 3
M HashMap - put() reagiert nicht? Java Basics - Anfänger-Themen 8
N Cast eines Objektes in eine Hashmap Java Basics - Anfänger-Themen 13
A CSV Zeilenweise einlesen und in einer HashMap speichern Java Basics - Anfänger-Themen 12
A Input/Output Hashmap in einem JPanel via JList anzeigen Java Basics - Anfänger-Themen 8
K HashMap auf leere Key-Value-Paare prüfen Java Basics - Anfänger-Themen 14
F Hilfe bei der HashMap. Java Basics - Anfänger-Themen 3
F HashMap vs. TreeMap Java Basics - Anfänger-Themen 5
B HashMap Java Basics - Anfänger-Themen 9
C Collections String[] als value in HashMap Java Basics - Anfänger-Themen 6
V Hashmap Iterieren Java Basics - Anfänger-Themen 4
C Csv File in Hashmap ausgeben Java Basics - Anfänger-Themen 14
T HashMap<String,Object> Werte auslesen Java Basics - Anfänger-Themen 5
I HashMap sortieren Java Basics - Anfänger-Themen 10
I HashMap Java Basics - Anfänger-Themen 11
H Collections Brauche modifizierte HashMap Java Basics - Anfänger-Themen 6
H TreeMap/HashMap synchronisieren Java Basics - Anfänger-Themen 2
A Datentypen Hashmap to Array Java Basics - Anfänger-Themen 11
D HashMap überschreibt Werte Java Basics - Anfänger-Themen 7
pg1337 Interface Comparable-Interface bei HashMap Java Basics - Anfänger-Themen 21
D erweiterte hashmap Java Basics - Anfänger-Themen 5
H HashMap<Int, String> - Er findet die Int-Klasse nicht. Java Basics - Anfänger-Themen 3
L HashMap zu JList Java Basics - Anfänger-Themen 6
S Erste Schritte HashMap Kurze Frage - Werte über Schleife ausgeben Java Basics - Anfänger-Themen 30
F Collections ArrayList oder Hashmap mittel Collections.sychronised Java Basics - Anfänger-Themen 6
B Klassen HashMap Zwei Objekte, gleicher Key Java Basics - Anfänger-Themen 4
N HashMap fehlerhafte Rückgabe Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben