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]那么为什么结果显示保存顺序?这仅仅是巧合还是不仅仅是满足于眼睛?
提前致谢!
答案 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)
巧合。可以保留订购,但保留订购不是保证,不应该依赖。事实上,人们不应该考虑按顺序排列地图。