As the title states, does converting a LinkedHashMap to a Map preserve the order in which elements are stored?
I believe not, but couldn't find any evidence.
Alternatively, is there any implementation of an immutable Map in Scala that preserves the order in which elements are inserted?
The generic Map
interface makes no such guarantee of ordering. Nor can it, as this would then rule out HashMap
as a possible implementation.
I believe collection.immutable.ListMap
preserves insertion order, you could also use a LinkedHashMap
via the Map
interface, which would then prevent access to any mutator methods. This is easy enough to do by explicitly specifying the type:
val m: scala.collection.Map[Int,Int] = collection.mutable.LinkedHashMap(1->2, 2->3)
or (using type ascription):
val m = collection.mutable.LinkedHashMap(1->2, 2->3) : Map[Int,Int]
No, LinkedHashMap.toMap
does not retain insertion order.
The best way I know is to convert it to a ListMap (immutable) :
def toMap[A, B](lhm: mutable.LinkedHashMap[A, B]): ListMap[A, B] = ListMap(lhm.toSeq: _*)
Simply hiding the mutation methods is not the same as converting to an immutable object.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With