为什么哈希映射比trie映射更好?

时间:2011-04-08 08:13:04

标签: data-structures hashtable hashmap hashcode trie

通过trie map我的意思是一个关联数组,其中有效负载存储在trie而不是哈希表中。

当我使用哈希映射/表时,我使用的键通常是字符串。哈希映射优于某些基于trie的映射有什么优势?我已经读过哈希映射更快 - 但在我看来,一致的哈希函数必须检查(char)数组的每个元素以获得最终的哈希 - 迭代数组一次。在一个特里,你同样必须迭代数组一次。

在我看来,在编码小对象时会占用更多内存(即使你只允许键中的小写字母字符,每个节点有26个指针,每个键通常有多个节点),但是加上你永远不必担心调整大小。为什么哈希地图如此常见,但我从未见过特里地图?

2 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:9)

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

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