Tout d'abord: HashMap
précisément ne pas fournir une base stable et/ou défini de la commande. Donc, tout ce que vous observez, c'est tout simplement un détail d'implémentation, et vous ne doit pas dépendre d'une quelconque façon.
Depuis qu'il est parfois utile de connaître la raison de l'apparence aléatoire de la commande, voici l'idée de base:
Un HashMap
a nombre de compartiments (implémentée par un tableau) dans lequel stocker les entrées.
Lorsqu'un élément est ajouté à la carte, il est affecté à un des seaux basée sur une valeur dérivée de son hashCode
et le seau de la taille de l' HashMap
. (Notez qu'il est possible que le seau est déjà occupée, que l'on appelle une collision. C'est géré correctement et correctement, mais je vais ignorer que la manipulation de la description, car il ne change pas le concept).
La perception de l'ordre des entrées (tel que retourné par itération sur l' Map
) dépend de l'ordre des entrées dans ces seaux.
Chaque fois que la taille est rabâchage (parce que la carte a dépassé sa plénitude seuil), alors le nombre de seaux de changements, ce qui signifie que la position de chaque élément peut changer, puisque le seau position est dérivée à partir du nombre de seaux.