【发布时间】:2018-09-27 14:33:03
【问题描述】:
我在 Scala 的 REPL 中有以下两个 Map:
案例一
scala> var a1=Map("a" -> "b", "c" -> "d", "e" -> "f", "g" -> "h")
a1: scala.collection.immutable.Map[String,String] = Map(a -> b, c -> d, e -> f, g -> h)
scala> var a2=Map("a" -> "b","c" -> "d","e" -> "f","g" -> "h","i" -> "j")
a2: scala.collection.immutable.Map[String,String] = Map(e -> f, a -> b, i -> j, g -> h, c -> d)
以上两个示例在 REPL 中打印相同的文本:
...
scala.collection.immutable.Map[String,String] = ...
但以下两个示例显示不同的输出文本:
案例 2
scala> a1.getClass.getName
res10: String = scala.collection.immutable.Map$Map4
scala> a2.getClass.getName
res11: String = scala.collection.immutable.HashMap$HashTrieMap
为什么 REPL 中的文本输出(scala.collection.immutable.Map$Map4 和 scala.collection.immutable.HashMap$HashTrieMap)不同?输出文本的确切含义是什么?我知道具有四个以上元素的Map 使用HashMap 而不是Map,但是为什么在案例1 中输出文本相同(对于变量a1 和a2),而在案例2 中却不同?
【问题讨论】:
-
出于性能原因,
Map.apply(被隐式调用)返回Map特征的不同实现,具体取决于存储的键值对数量。
标签: scala dictionary collections hashmap read-eval-print-loop