Scala有一个TrieMap集合。
什么是TrieMap?与HashMap相比有什么优缺点?
答案 0 :(得分:31)
Scala TrieMap
是基于trie的并发可伸缩地图实现。与普通的trie映射不同,Scala TrieMap
具有高效,无阻塞,O(1)时间snapshot
操作(以及略微优化的readOnlySnapshot
)操作。
TrieMap
的绝对性能略低于JDK8 ConcurrentHashMap
,但优点是它提供了一致的迭代器,这是并发数据结构通常没有的东西。这意味着您可以在一个时间点捕获特里结构中的所有元素(性能数字和分析here)。如果您需要一次捕获所有元素,则应使用TrieMap
(例如,在UI中列出其所有元素,或者一致地分析它们)。
答案 1 :(得分:21)
TrieMaps是使用特里数据结构的地图,这些数据结构基本上是浅树。例如,如果您有32位哈希,则将其分解为多个部分,例如4次8,并在树的每个级别分支到最多256个子树。显然,由于哈希的固定大小(假设碰撞很少),这给出了O(1)性能。
trie结构可以有效地变为不可变,重用trie的结构来创建带有添加或删除元素的新trie。 GC对时间/内存影响的相对性能在很大程度上取决于实现和负载,而不是尝试一个通用的答案,我会说运行一个基准。虽然对于没有不变性要求的单个线程,经典的hashmap通常会产生更好的平均性能和更差的最坏情况性能。
作为旁注我会提到,因为trieMap也使用哈希它也是一个哈希映射,因此我建议将其称为trie支持的哈希映射与阵列支持的哈希映射。