Zu allererst: HashMap
speziell bietet keine stabile und/oder die Bestellung definiert. Also alles, was Sie beobachten, ist einfach ein Implementierungsdetail und Sie müssen davon in keiner Weise abhängen.
Da es manchmal nützlich ist der Grund für die scheinbar zufällige Reihenfolge zu kennen, hier ist die Grundidee:
A HashMap
hat Anzahl der Schaufeln (als Array implementiert), in der Einträge zu speichern.
Wenn ein Element zur Map hinzugefügt wird, wird es einem Bucket basierend auf einem Wert zugeordnet, der von seinem und der Bucket-Größe des HashMap
abgeleitet wird. (Beachten Sie, dass der Bucket möglicherweise bereits besetzt ist, was als Kollision bezeichnet wird. Dies wird ordnungsgemäß und korrekt gehandhabt, aber ich werde diese Behandlung für die Beschreibung ignorieren, da sie das Konzept nicht ändert).
Die empfundene Ordnung des entires (wie durch Iterieren über die Map
zurückgegeben werden), hängt von der Reihenfolge der Einträge in den Eimern.
Immer wenn die Größe aktualisiert wird (weil die Karte ihren Schwellenwert überschritten hat), ändert sich die Anzahl der Buckets, was bedeutet, dass sich die Position jedes Elements ändern kann, da die Bucket-Position ebenfalls aus der Anzahl der Buckets abgeleitet wird .
noch eine Hashmap folgt die gleiche vorhersagbare Reihenfolge jedes Mal ... warum? –
@pop stack HashMap garantiert nicht die Bestellung. In Stephen Cs Antwort unter http://stackoverflow.com/questions/2144776/order-of-values-retrieved-from-a-hashmap finden Sie Details darüber, wie und warum sich das ändern könnte. –
Diese Art von Antwort ist großartig! Ein Spickzettel wäre toll, um die Unterschiede zwischen Map, List, Set in Java aufzulisten! –