Data structures 为什么散列映射比trie映射更好?

Data structures 为什么散列映射比trie映射更好?,data-structures,hashtable,hashmap,hashcode,trie,Data Structures,Hashtable,Hashmap,Hashcode,Trie,trie映射指的是一个关联数组,其中有效负载存储在一个数组中,而不是散列表中 当我使用哈希映射/表时,我使用的键通常是字符串。与一些基于trie的映射相比,散列映射有哪些优点?我已经读到散列映射速度更快——但在我看来,一致的散列函数必须检查(char)数组的每个元素,以获得最终的散列——在数组上迭代一次。在trie中,您同样需要在数组上迭代一次 在我看来,这在编码小对象时会占用更多的内存(即使您只允许在键中使用小写字母字符,每个节点有26个指针,每个键通常有多个节点),但从好的方面来说,您不必担

trie映射指的是一个关联数组,其中有效负载存储在一个数组中,而不是散列表中

当我使用哈希映射/表时,我使用的键通常是字符串。与一些基于trie的映射相比,散列映射有哪些优点?我已经读到散列映射速度更快——但在我看来,一致的散列函数必须检查(char)数组的每个元素,以获得最终的散列——在数组上迭代一次。在trie中,您同样需要在数组上迭代一次


在我看来,这在编码小对象时会占用更多的内存(即使您只允许在键中使用小写字母字符,每个节点有26个指针,每个键通常有多个节点),但从好的方面来说,您不必担心调整大小。为什么散列映射如此常见,但我从未见过trie映射?

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


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

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

实际上,构建树的尝试也是很有可能的。