为啥 hash map 比 trie map 好?

Posted

技术标签:

【中文标题】为啥 hash map 比 trie map 好?【英文标题】:Why are hash maps better than trie maps?为什么 hash map 比 trie map 好? 【发布时间】:2011-08-01 07:51:42 【问题描述】:

我所说的 trie map 是指关联数组,其中有效负载存储在 trie 而不是哈希表中。

当我使用哈希映射/表时,我使用的键通常是字符串。与某些基于 trie 的映射相比,哈希映射有哪些优势?我已经读过哈希映射更快 - 但在我看来,一致的哈希函数必须检查 (char) 数组的每个元素以获取最终哈希 - 遍历数组一次。在 trie 中,您同样必须只对数组进行一次迭代。

在我看来,在对小对象进行编码时,这确实会使用更多的内存(即使您只允许键中的小写字母字符,它是每个节点 26 个指针,并且每个键通常是多个节点),但是在另外,您永远不必担心调整大小。为什么hash map这么常见,却没见过trie map?

【问题讨论】:

【参考方案1】:

如果您是 Scala 程序员,TrieMap 是“哈希数组映射的 trie 的并发线程安全无锁实现”。目前 Java 标准库中没有。

【讨论】:

【参考方案2】:

Hash map 比 trie map 更常见,因为它们更通用:它们可以用于任何可散列的对象,而 trie 则适用于序列。哈希表在常见实现中也具有更好的引用局部性,因为它们将元素存储在一起。

(严格来说,每个对象都是一个位序列,但是通用 trie 将要求用户在将对象存储到 trie 之前对其进行序列化。与定义自定义哈希函数相比,这非常不方便。)

【讨论】:

其实构建树的尝试也是完全可以的。

以上是关于为啥 hash map 比 trie map 好?的主要内容,如果未能解决你的问题,请参考以下文章

海量数据处理(上)

为啥#map 比#each 更有效?

NSMutableDictionary 比 Java Map 慢得多……为啥?

为啥 Spark 比 Hadoop Map Reduce 快

为啥 map.values().stream() 比 Array.stream(array) 慢得多

c++ 为啥hashmap占用内存多