Wie findich heraus auf welchem Platz ein Wert ist inner HashMap?

... komplette Frage anzeigen

3 Antworten

Das hängt von der Implementierung ab, und ob es dir diese erlaubt, den sog. Bucket-Index und / oder die Bucket-Größe zu erfragen.

Bei C++ geht das so:

http://www.cplusplus.com/reference/unordered_map/unordered_map/bucket/

Bei den meisten High-Level-Sprachen wie Java oder Python gibt es in der Standardimplementierung aber keinen direkten Weg, das zu erfahren, was du wissen möchtest.

(Disclaimer: Doch, gibt es zwar, aber Reflection und Schweinereien mit internen APIs oder gar einem Debugger zähle ich jetzt mal nicht zu dem, was man allgemein tun sollte.)

Aber in den meisten Fällen sind die gängigen Hashmaps so implementiert, dass du eigentlich gar nicht wissen musst / sollst, wie der innere Aufbau ist. Darum geht es ja bei der Kapselung. :)

Falls du hingegen einfach nur testen willst, wie gut deine Hashfunktion ist, baue dir eine eigene Test-Umgebung, extra für diesen Fall. Hashfunktionen sollte man sowieso NIEMALS selbst entwickeln, es sei denn, man ist "Hashfunktionsentwickler" und gleichzeitig eine Koryphäe auf dem Gebiet der Low-Level-Entwicklung und der Mathematik.

In 99,999% der Fälle, wird eine Eigenentwicklung schlechter sein, als alles andere bisher dagewesene. Außerdem musst du immer abwägen zwischen Qualität und Geschwindigkeit, und wie die darunter liegende Plattform mit Überläufen umgeht, aber das führt jetzt zu weit ...

Naja, viel Spaß noch! :)

Antwort bewerten Vielen Dank für Deine Bewertung

Gar nicht. Wenn ich mich recht erinnere funktionieren maps ja mit keys. Also z.b. value = map.get(key)

Für so etwas ist eher eine arraylist empfehlenswert oder keys die die Position sind.

Z.b. hashmap.geht(1) gibt dir den wert mit dem key 1 und 1 steht dabei für die Position 1.

Antwort bewerten Vielen Dank für Deine Bewertung

Einen 'Platz' gibt es bei einer Map nicht: Zu einem Schlüssel, gibt es einen Wert:

Key | Value
-----------
AA  | Wert1
XD  | Wert XY
BB  | ABCDEF

Bei der Hashmap wird intern auch nur der Hashwert eines Keys als Index im internen Speicher gespeichert. - Als 'Benutzer' einer Map kommst du sowieso nicht an die Information.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von TeeTier
19.07.2017, 13:37

Alles richtig, aber ich denke, der Fragensteller wollte nur den Index (also Hash % Bucketzahl) wissen, oder? Bei nochmaligem Lesen der Frage bin ich mir jetzt gar nicht mehr so sicher ... ><

0

Was möchtest Du wissen?