正如标题所述,将LinkedHashMap转换为Map是否保留了元素的存储顺序?
我不相信,但找不到任何证据。
或者,Scala中是否存在一个不可变Map的实现,它保留了插入元素的顺序?
答案 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)