2015-11-01 140 views
6

我一直在阅读一些文章,并想知道是否有人可以提出一个TrieMap优于使用HashMap的情况。何时适合使用TrieMap?

那么基本上什么架构决定应该激励使用TrieMap?

+0

你的意思是scala.collection.concurrent.TrieMap? –

回答

5

根据文档。 这是可变的收集,可以安全地用于多线程应用程序。

并发哈希特里或TrieMap是concurrent thread-safe lock-free 执行哈希阵列映射trie。它用于实现并发地图抽象。它有particularly scalable concurrent插入 并删除操作,并且是memory-efficient。它支持O(1),原子, 无锁快照,用于实现可线性锁定大小, 迭代器和清除操作。评估(懒惰)快照的成本是 分布在后续更新中,从而使快照评估可水平扩展。

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

而且它有非常好的API为caching。 因此,例如,您必须计算不同数量的阶乘,并有时重新使用此结果。

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 
    } 
    } 

讲究 - 上面使用全局状态(缓存)的写入操作的功能,但它是绝对安全的并发线程使用它。你不会丢失任何数据。