Scala application de la feuille de garder les entrées dans l'ordre d'insertion?
En Java, j'utilise LinkedHashMap
à cette fin. La documentation de Java LinkedHashMap
est très clair qu'il a "prévisible itération de l'ordre" et j'ai besoin de le même en Scala.
Scala a ListMap
et LinkedHashMap
, mais la documentation sur ce qu'ils font exactement l'est pas.
Question: Est-Scala LinkedHashMap
ou ListMap
la mise en œuvre à utiliser à cette fin? Si non, quelles autres options sont disponibles en plus de l'aide de l'Java LinkedHashMap
directement?
- juste pour remarque, je ne recommande pas l'utilisation de scala ListMap classes en général. Ils ont le temps linéaire de la complexité pour la plupart des opérations. Donc, sauf si votre carte est minuscule, la logique qui utilise listmaps va vraiment faire glisser. docs.scala-lang.org/overviews/collections/...
Vous devez vous connecter pour publier un commentaire.
De la
LinkedHashMap
Scaladoc page:toutes traversée des méthodes de cette classe visite éléments dans l'ordre où ils ont été
insérée.
La différence entre les deux est que
LinkedHashMap
est mutable toutListMap
est immuable. Sinon ils sont tous les deuxMapLike
et aussi de préserver l'ordre d'insertion.ListMap
a linéaire de la complexité dans la recherche et l'insertionPour LinkedHashMap, la réponse est assez clair qu'il conserve l'ordre d'insertion.
Mais pour ListMap, il semble qu'il y a quelques confond ici.
Tout d'abord, il y a deux ListMap.
Deuxièmement, le document de ListMap a quelque chose de mal, autant que j'ai essayé.
mutable.ListMap
De l'ordre réel n'est pas de l'ordre d'insertion comme il le dit.
Et il n'est pas l'inverse de l'ordre d'insertion, soit. Le résultat que j'ai essayé est [suite, seconde, première, troisième]
immuable.ListMap
Que le document en disant que, l'ordre est l'ordre d'insertion.
Une chose à remarquer, c'est qu'il est stocké en interne en inversé l'ordre d'insertion. Et stockée en interne de l'ordre et de l'itérable/traversée de l'ordre sont deux choses. L'stockée en interne de l'ordre décide à la fois de la complexité des méthodes de recherche tels que directeur/dernier/queue/init/.
LinkedHashmap n'est mise en œuvre comme une carte mutable
ListMaps sont mis en œuvre dans la changeant et immuable paquets, cependant seulement l'immuable ListMaps maintenir l'arrière de la commande. (mutable listmaps ne pas maintenir l'ordre)
ListMap
ne conserve pas l'ordre d'insertion.Seulement
LinkedHashMap
maintient l'ordre des éléments de la façon dont ils sont insérés.Si vous voulez maintenir l'ordre dans les Listes otherthan Carte, vous pouvez utiliser
LinkedList
Scala 2.13 est l'introduction de deux nouvelles immuable implémentations de
Map
qui maintiennent l'ordre d'insertion:VectorMap
etSeqMap
. Voir ce PR:"Comme de l'écriture, de la Scala 2.13 est toujours prévu pour être publié en 2018.