Scala LinkedHashMap.toMap保留顺序?

hal*_*arp 4 scala

正如标题所述,将LinkedHashMap转换为Map是否保留了元素的存储顺序?

我不相信,但找不到任何证据.

或者,Scala中是否存在任何不可变Map的实现,它保留了插入元素的顺序?

Kev*_*ght 9

通用Map接口不能保证订购.它也不可能,因为这将HashMap作为可能的实施排除.

我相信collection.immutable.ListMap保留插入顺序,你也可以使用LinkedHashMap通过Map接口,这将阻止访问任何mutator方法.通过显式指定类型,这很容易做到:

val m: scala.collection.Map[Int,Int] = collection.mutable.LinkedHashMap(1->2, 2->3)
Run Code Online (Sandbox Code Playgroud)

或(使用类型归属):

val m = collection.mutable.LinkedHashMap(1->2, 2->3) : Map[Int,Int]
Run Code Online (Sandbox Code Playgroud)


mau*_*hiz 5

不,LinkedHashMap.toMap不保留插入订单.

我知道的最好的方法是将它转换为ListMap(不可变):

def toMap[A, B](lhm: mutable.LinkedHashMap[A, B]): ListMap[A, B] = ListMap(lhm.toSeq: _*)
Run Code Online (Sandbox Code Playgroud)

简单地隐藏变异方法与转换为不可变对象不同.