我知道普通的可变映射是如何工作的(使用哈希表),我知道不可变列表是如何工作的(递归链表)和它们相对于可变列表的优势(恒定时间附加而不会弄乱原始映射)但是如何使用不可变映射(例如斯卡拉的工作?
我知道在生成新映射时不会弄乱原始映射的优势,但是底层数据结构如何工作,以及它们具有哪种性能特征,例如与可变哈希表相比?是否有人们用来实现这些的标准数据结构,我可以在CLRS /维基百科中查找?
答案 0 :(得分:19)
持久哈希地图是使用名为 Hash trie 的结构实现的。它是originally proposed by Phil Bagwell(他是EPFL Scala小组的成员),但实际上是由Clojure首先实现的。它在2010年出现 2.8 时出现了scala。
Dan Spiewak有一个great talk on functional data structures,其中哈希特里的机制被非常清晰地解释(以及其他诸如银行家的队列)!他还在谈话中非常好地解释了渐近的大O表现。
去年10月,菲尔又在London scala Lift Off上发表了另一个关于并行持久性数据结构的讨论。
持久性排序地图是通过Red-Black tree
实现的答案 1 :(得分:1)
它可以是树(红黑)或哈希图。它们的访问特性取决于底层实现。树是O(log n)用于读访问;哈希映射是O(1)。