Scala LinkedHashMap.toMap保留顺序?

时间:2011-06-01 09:42:32

标签: scala

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

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

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

3 个答案:

答案 0 :(得分:9)

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

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

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

或(使用类型归属):

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

答案 1 :(得分:5)

不,LinkedHashMap.toMap不会保留广告订单。

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

def toMap[A, B](lhm: mutable.LinkedHashMap[A, B]): ListMap[A, B] = ListMap(lhm.toSeq: _*)

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

答案 2 :(得分:-5)

您可以使用TreeMap

TreeMap(Map(1 -> "one", 2 -> "two", 3 -> "three").toArray:_*).map(println)