将使用" +"在地图中保存我的订单?没有权利?

时间:2014-09-02 17:57:16

标签: scala scala-collections

scala>  var test2 : Map[String , String] = Map("a"->"b","c"->"d")
test2: Map[String,String] = Map(a -> b, c -> d)

test2 = test2 + ("e"->"f" , "g"->"h")
test2: Map[String,String] = Map(a -> b, c -> d, e -> f, g -> h)

等等。我想知道Map不应该保留插入顺序[为此目的我们有LinkedHashMap]那么为什么结果显示保存顺序?这仅仅是巧合还是不仅仅是满足于眼睛?

提前致谢!

2 个答案:

答案 0 :(得分:6)

巧合只适用于前4项。

val m = Map('a' -> 1, 'b' -> 2, 'c' -> 3, 'd' -> 4)
// m: immutable.Map[Char,Int] = Map(a -> 1, b -> 2, c -> 3, d -> 4)

m + ('e' -> 5)
// immutable.Map[Char,Int] = Map(e -> 5, a -> 1, b -> 2, c -> 3, d -> 4)

原因是小地图有一个特殊的优化实现,它确实保留了插入顺序(例如append to Map of one pair),但是一旦你越过这个边界,它就不再起作用了。

答案 1 :(得分:2)

巧合。可以保留订购,但保留订购不是保证,不应该依赖。事实上,人们不应该考虑按顺序排列地图。