大家好我知道Scala有多种类型的地图,包括HashMap,TreeMap(我相信是Trie),BitMap和ListMap。
因此,当您使用基本因子Map(1 - > 2,2 - > 3)在scala中创建Map时,Scala会选择使用哪种实现?我猜scala有一些规则来选择上面列出的地图类型,但这些规则是什么?显然要使用哈希,需要在某处定义某种哈希策略。或者scala是否默认为其中一个实现?
由于
答案 0 :(得分:2)
根据documentation on HashTries(滚动到HahsTries部分),Scala使用的默认实现是HashMap。
然而,在某些情况下,Scala会返回所谓的HashMap实现的专用表示形式,例如包含最多(包括4个元素的地图,这也在文档链接中)您可以通过执行以下操作进行验证:
val map: Map[Int, Int] = Map(1 -> 2, 2 -> 3, 3 -> 4, 4 -> 5)
val map2: Map[Int, Int] = Map(List(1 -> 2, 2 -> 3, 3 -> 4, 4 -> 5, 5 -> 6): _*)
println(map.getClass.getName)
println(map2.getClass.getName)
输出是:
scala.collection.immutable.Map$Map4
scala.collection.immutable.HashMap$HashTrieMap
如果您使用可以反编译代码的IDE,那么您会看到在Map1
,Map2
,Map3
和Map4
的实例中管理密钥的方式是相同的,因为在内部,这个集合由元组的序列(不是Scala Seq
)表示。
默认的HashMap实现使用键的哈希值,详细信息在我发布的链接中。