2011-04-08 119 views
6

通过trie map我是指一个关联数组,其中有效载荷存储在trie而不是散列表中。为什么hash映射比trie映射好?

当我使用散列图/表时,我使用的键通常是字符串。哈希映射对某些基于树的映射有什么优势?我读过一个哈希映射更快 - 但在我看来,一致的哈希函数将不得不检查(char)数组的最后一个哈希的每个元素 - 遍历数组一次。在一个特里你同样必须遍历数组一次。

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

回答

8

哈希映射比特里映射更常见,因为它们更通用:它们可以用于处理任何可哈希的对象,而特里可以处理序列。哈希表在常见实现中也具有更好的引用位置,因为它们将元素靠近在一起。

(严格的说,每一个对象是位序列,但随后一个通用的线索会要求用户将其存储在特里之前序列化的对象。相比于定义自定义散列函数这是相当不方便。)

+0

实际上,它也很有可能构建树的尝试。 – dfeuer 2015-03-20 06:31:52

12

为了防止你是一个Scala程序员,TrieMap是一个“哈希阵列映射trie的并发线程安全无锁实现”。目前没有Java标准库。