2

我在将对附加到现有地图时遇到问题。一旦我到达第五对地图,地图就会自行重新排序。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) ?

谢谢

4

1 回答 1

3

默认情况下,Scalaimmutable.Map使用HashMap.

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

此类不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变

因此,地图实际上不是包含"a1" -> 1的表,而是包含 的表hash("a1") -> 1。该映射根据键的哈希而不是您放入其中的键重新排序其键。

正如评论中建议的那样,使用LinkedHashMapListMapScala Map implementation 将条目保持在插入顺序中?

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

于 2015-07-13T18:51:01.057 回答