Christian Kruse: Hash Problem

Beitrag lesen

Hallo Kay,

Aber: warum bekomme ich die Zeichenketten in einer anderen
Reihenfolge, als ich sie eingelesen habe? Ich habe keine
Sortierroutine angewendet - warum also sortiert Java die Elemente
um?

Java sortiert die Reihenfolge der Elemente gar nicht. Die ergibt sich
aus der Hash-Summe. Eine Hash-Table arbeitet ungefähr so: aus dem
Key-String wird eine Zahl (im Normalfall unsigned 32 Bit gross)
erstellt. Diese Summe wird gekürzt (z. B. auf 16 Bit) und gibt damit
eine Index-Zahl für einen Array, der halt 2^x Elemente groß ist, wobei
x die Größe der Zahl bezeichnet (in diesem Fall also 16, weil die Zahl
auf 16 Bit gekürzt wurde). Da wir allerdings einen begrenzten
Abbildungsraum haben, sind Dupletten (zwei Keys, die dieselbe
Hash-Summe ergeben) unvermeidlich. Treten zu viele Dupletten auf, so
wird die Hash-Tabelle vergrößert (z. B. auf 32 Bit). Im Zuge der
Vergrößerung muss jedes Element neu einsortiert werden; das kostet
natürlich Zeit, jedoch ist der Nutzen daraus größer als der Aufwand.

Ich hoffe, du verstehst jetzt, warum eine Hash-Tabelle nicht sortiert
ist, und dass du...

Wie verhindere ich das?

... das nicht verhindern kannst.

Grüße,
 CK

--
Der Verstand steht ueber allem. Was durch die Vorstellungskraft nicht geschaffen werden kann, existiert nicht.