【发布时间】:2012-08-28 11:17:09
【问题描述】:
在 Scala shell 中我这样做了:
import java.util._
import scala.collection.JavaConversions._
val t: SortedMap[String,Int] = new TreeMap[String,Int] () // produces an empty java.util.SortedMap
t("a") = 1; t("b") = 2; t("A") = 3; t("0") = 4
t // prints: res35: java.util.SortedMap[String,Int] = {0=4, A=3, a=1, b=2}, as expected
t foreach println // also prints the (k,v) pairs in the same TreeMap sorted order
但是,以下语句并未按排序顺序打印对,它似乎按哈希桶顺序打印它们,(0,4) (b,2) (A,3) (a,1):
for ((k,v) <- t) printf("(%s,%d)%n", k, v)
在与 for 和 foreach 相关的其他答案中,似乎 for 理解应该转化为 foreach 的使用,如下所示:
"a for-comprehension for (p e0 }"
但这似乎不是这里发生的事情。
请注意,如果我从 scala TreeMap 创建一个 scala SortedMap,那么 foreach 和 for 都会按照我的预期按排序顺序生成 (k,v) 对. Java TreeMap 转换为 scala 的方式似乎有所不同。
关于为什么会出现这种差异的任何 cmets 或想法?
【问题讨论】:
标签: scala