5对Scala map +=运算符



我有一个问题,追加对现有的地图。一旦我到达地图的第五对,地图就会重新排序。4对的顺序是正确的,但一旦添加了第5对,它就会自己移动。请看下面的例子(假设我构建了4对Map,一次一对):

scala> val a = Map("a1" -> 1, "a2" -> 1, "a3" -> 1, "a4" -> 1)
a: scala.collection.immutable.Map[String,Int] = Map(a1 -> 1, a2 -> 1, a3 -> 1, a4 -> 1)
scala> a += ("a5" -> 1)
scala> a
res26: scala.collection.immutable.Map[String,Int] = Map(a5 -> 1, a4 -> 1, a3 -> 1, a1 -> 1, a2 -> 1)

添加的第五个元素跳到地图的前面,并将其他元素移到周围。是否有办法保持元素的顺序(1、2、3、4、5)?

谢谢

默认情况下Scala的immutable.Map使用HashMap

从http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html

:

这个类不保证映射的顺序;特别是,它不能保证顺序在一段时间内保持不变

因此,映射实际上不是包含"a1" -> 1的表,而是包含hash("a1") -> 1的表。map会根据键的哈希值而不是你放进去的键来重新排序它的键。

按照评论中的建议,使用LinkedHashMapListMap:Scala Map实现保持条目插入顺序?

PS:您可能有兴趣阅读这篇文章:http://howtodoinjava.com/2012/10/09/how-hashmap-works-in-java/

相关内容

  • 没有找到相关文章

最新更新