2017-07-12 4 views
-1

Ich möchte wissen, wie Hashtable seine Werte nach der Verwendung der Put-Methode bestellt.Wie funktioniert HashTable?

Zum Beispiel:

a   b   c  d     e 
Normal 2 weeks  Next Save and Finish  Go to Cases 

hashtable.put ("a", "Normal"); ...

Die Reihenfolge der Werte wird anders sein und nicht in der gleichen Reihenfolge, die wir setzen. Ich denke, dass die Reihenfolge wie folgt sein:

b   a  e    c   d      
2 weeks Normal Go to Cases Next  Save and Finish 

Bitte Datenstrukturen deuten darauf hin, dass das Problem zu lösen.

Danke.

+2

'HashTable' bietet keine Garantie für Auftrag erhalten. Betrachten Sie [LinkedHashMap] (https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashMap.html). – bradimus

+2

Es bestellt sie, indem er sie in einen Mixer steckt und dann jedes Stück auswählt. (Es gibt keine Reihenfolge) – byxor

+0

Akzeptieren Sie die Antwort, die Ihnen am besten geholfen hat, das Problem zu lösen oder Sie das Konzept verstehen zu lassen, Sie haben bisher ** 8 ** -Frage gestellt und nicht akzeptiert! Bro, ermutigen Sie die Benutzer auch, Ihnen zu helfen, indem Sie sie belohnen und ihre Antworten akzeptieren, sowie für jede Antwort, die Sie akzeptieren, erhalten Sie +2. – Yahya

Antwort

2

Ähnlich wie HashMap, HashTable garantiert auch nicht die Reihenfolge der Elemente.

Grund
HashTable ist für den schnellen Look optimiert. Dies wird erreicht, indem Hash für gespeicherte Schlüsselwerte berechnet wird. Dadurch wird sichergestellt, dass die Suche nach einem beliebigen Wert in HashTable O (1) ist, unabhängig von der Anzahl der Einträge in HashTable.

Somit werden die Einträge basierend auf dem für den Schlüssel generierten Hash gespeichert. Aus diesem Grund garantiert HashTable nicht die Reihenfolge der Elemente, in die sie eingefügt wurden.

Ein Hashwert (oder einfach Hash), auch als Nachrichtenauszug bezeichnet, ist eine Zahl, die aus einer Textzeichenfolge generiert wird. Der Hash ist wesentlich kleiner als der Text selbst und wird durch eine Formel so generiert, dass es äußerst unwahrscheinlich ist, dass ein anderer Text denselben Hashwert erzeugt.

http://www.webopedia.com/TERM/H/hashing.html
http://interactivepython.org/runestone/static/pythonds/SortSearch/Hashing.html

+0

Vielen Dank für Ihre großartige Antwort. –

6

Wie sehr oft in diesen Fällen ist die Antwort in the documentation:

Diese Klasse keine Garantie für die Bestellung von der Karte macht; insbesondere garantiert es nicht, dass der Auftrag über die Zeit konstant bleibt.

1

Wie bereits erläutert, ist die Iterationsreihenfolge der Hashtables nur zufällig. Wenn Sie die eingefügte Reihenfolge beibehalten möchten, verwenden Sie LinkedHashMap. Wenn Sie eine natürliche Reihenfolge oder eine vordefinierte Reihenfolge erhalten möchten, verwenden Sie TreeMap. Als natürliche Reihenfolge meine ich die Reihenfolge der Schlüssel, zum Beispiel String, Integer, Long usw., als vergleichbares Interface, werden automatisch wie jede andere Klasse sortiert, die Comparable implementiert. Die vordefinierte Reihenfolge kann auch von einem Comparator bereitgestellt werden, der die TreeMap erstellt.