web-dev-qa-db-fra.com

EntrySet () dans un LinkedHashMap garantit-il également l'ordre?

J'utilise un LinkedHashMap pour garantir la commande lorsque quelqu'un essaie d'y accéder. Cependant, quand vient le temps de l'itérer, l'utilisation de entrySet () pour renvoyer des paires clé/valeur garantit-elle également l'ordre? Aucune modification ne sera effectuée lors de l'itération.

EDIT: En outre, y a-t-il des effets néfastes de l'itération à travers la carte en itérant à travers ses clés et en appelant get?

66
Diego

Selon le Javadocs , oui.

Cette implémentation diffère de HashMap en ce qu'elle maintient une liste doublement liée parcourant toutes ses entrées. Cette liste liée définit l'ordre d'itération, qui est normalement l'ordre dans lequel les clés ont été insérées dans la carte ( ordre d'insertion ).

Quant au montage, non, cela devrait très bien fonctionner. Mais l'ensemble d'entrée est un peu plus rapide car il évite la surcharge de recherche de chaque clé dans la carte pendant l'itération.

49
Michael Myers

Cette liste chaînée définit l'ordre d'itération, qui est normalement l'ordre dans lequel les clés ont été insérées dans la carte (ordre d'insertion). Notez que l'ordre d'insertion n'est pas affecté si une clé est réinsérée dans la carte. (Une clé k est réinsérée dans une carte m si m.put (k, v) est invoqué lorsque m.containsKey (k) retournerait vrai immédiatement avant l'invocation.)

1
Robert

Si vous êtes sûr qu'aucune modification ne sera apportée pendant l'itération, un bon ordre avec entrySet() est garanti, comme indiqué dans API .

1
Daniel F. Thornton