哈希表(通常)执行搜索操作(查找),其复杂度限制为
O(n)<=T(n)<=O(1),平均情况复杂度为
O(1 +n/k);但是,二进制搜索树(BST)执行搜索操作(查找),其复杂度限制为
O(n)<=T(n)<=O(log_2(n)),平均情况复杂度为
O(log_2(n))。(您自己)应该了解每个(每个)数据结构的实现,以了解其优缺点,操作时间复杂度和代码复杂度。
例如,哈希表中的条目数通常具有一些固定数量的条目(某些部分可能根本无法填充),其中包含冲突列表。另一方面,树通常每个节点有两个指针(引用),但是如果实现允许每个节点有两个以上的子节点,则树可以更多,并且这允许树随着节点的添加而增长,但可能不允许重复。(Java
TreeMap的默认实现不允许重复)
还有一些特殊情况需要考虑,例如,如果特定数据结构中的元素数量无限制地增加或接近数据结构的基础部分的限制,该怎么办?那么执行一些重新平衡或清理操作的摊销操作又如何呢?
例如,在哈希表中,当表中的元素数变得足够大时,可能发生任意数量的冲突。另一方面,在插入(或删除)之后,树通常需要进行重新平衡过程。
因此,如果您有类似缓存的内容(例如,有界元素的数量或大小是已知的),那么哈希表可能是您的最佳选择。但是,如果您有更多类似字典的内容(例如,填充一次,查找多次),那么我会使用一棵树。
但是,这仅在一般情况下(未提供任何信息)。您必须了解发生的过程,以决定如何使用哪种数据结构来决定使用哪种数据结构。
当我需要一个多图(范围查找)或集合的排序展平时,它就不能是哈希表。



