【问题标题】:What map does scala choose to use?scala 选择使用什么地图?
【发布时间】:2018-02-05 04:36:33
【问题描述】:

您好,我知道 Scala 带有多种类型的地图,包括 HashMap、TreeMap(我认为是 Trie)、BitMap 和 ListMap。

因此,当您使用 Map(1 -> 2, 2 -> 3) 的基本因子在 scala 中创建 Map 时,Scala 选择使用哪个实现?我猜 scala 有一些规则可以从上面列出的地图类型中进行选择,但是这些规则是什么?显然,要使用散列,需要在某处定义某种散列策略。还是 scala 只是默认为其中一种实现?

谢谢

【问题讨论】:

  • 作为 vanilla Java,Scala 使用.hashCode 和/或排序。请先看看documentation

标签: scala dictionary


【解决方案1】:

根据documentation on HashTries(滚动到HahsTries 部分),Scala 使用的默认实现是HashMap。

Scala,但是在某些情况下返回所谓的 HashMap 实现的特殊表示,例如包含多达(包括 4 个元素,这也在文档链接中)的 Maps

您可以通过以下方式验证这一点:

  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,您会看到在 Map1Map2Map3Map4 的实例中管理键的方式是相等的,因为在内部这个集合由一个序列表示(不是 Scala Seq)的元组。

默认的 HashMap 实现使用键的哈希值,详细信息在我发布的链接中。

【讨论】:

    猜你喜欢
    • 2012-12-08
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多