何时使用TrieMap是否合适?

时间:2015-11-01 18:34:50

标签: scala scala-collections

我一直在阅读一些帖子,并想知道是否有人可以提出TrieMap何时比使用HashMap更可取的情况。

基本上,架构决策应该激励使用TrieMap?

1 个答案:

答案 0 :(得分:5)

根据文件。 它是可变的集合,可以在多线程应用程序中安全地使用。

  

并发hash-trie或TrieMap是concurrent thread-safe lock-free   哈希数组映射trie的实现。它用于实现    并发映射抽象。它有particularly scalable concurrent个插入     并删除操作,memory-efficient。它支持O(1),原子,      无锁快照,用于实现可线性化的无锁大小,      迭代器和清除操作。评估(懒惰)快照的成本是    分布在后续更新中,从而使快照评估可以横向扩展。

有关详细信息,请参阅:http://lampwww.epfl.ch/~prokopec/ctries-snapshot.pdf

它还有caching非常好的API。 因此,例如,您必须计算不同数量的阶乘,有时会重复使用此结果。

  object o {

    val factorialsCache = new TrieMap[Int, Int]()

    def factorial(num: Int) = ??? // really heavy operations
    def doWorkWithFuctorial(num: Int) = {
      val factRes = factorialsCache.getOrElseUpdate(num, {
        // we do not want to invoke it very often
        factorial(num)
           // this function will be executed only if there are no records in Map for such key
      })
      // start do some work `withfactRes`
      factRes
    }
  }

注意 - 上面的函数使用全局状态(缓存)进行写操作,但在并发线程中使用它绝对安全。你不会丢失任何数据。