为什么ListMap的不可变版本以升序存储,而可变版本以降序存储?为什么可变和不可变ListMaps在Scala中有不同的顺序?
下面是测试如果你有,你可以使用scalatest-1.6.1.jar和JUnit-4.9.jar
@Test def StackoverflowQuestion()
{
val map = Map("A" -> 5, "B" -> 12, "C" -> 2, "D" -> 9, "E" -> 18)
val sortedIMMUTABLEMap = collection.immutable.ListMap[String, Int](map.toList.sortBy[Int](_._2): _*)
println("head : " + sortedIMMUTABLEMap.head._2)
println("last : " + sortedIMMUTABLEMap.last._2)
sortedIMMUTABLEMap.foreach(X => println(X))
assert(sortedIMMUTABLEMap.head._2 < sortedIMMUTABLEMap.last._2)
val sortedMUTABLEMap = collection.mutable.ListMap[String, Int](map.toList.sortBy[Int](_._2): _*)
println("head : " + sortedMUTABLEMap.head._2)
println("last : " + sortedMUTABLEMap.last._2)
sortedMUTABLEMap.foreach(X => println(X))
assert(sortedMUTABLEMap.head._2 > sortedMUTABLEMap.last._2)
}
继承人的通过测试输出:
head : 2
last : 18
(C,2)
(A,5)
(D,9)
(B,12)
(E,18)
head : 18
last : 2
(E,18)
(B,12)
(D,9)
(A,5)
(C,2)
良好的集合API的一个主要优点是,它保护你从不必“详尽了解所有像偏心这个”。迭代的顺序不是'ListMap'的合约的一部分,所以你不必考虑它。 –
不太具体的界面描述为未来的变更/改进留下了更多空间。如果你想要元素顺序的可靠行为,请使用'SortedMap'。 – Raphael
感谢排序地图对我有好处。 – Zasz