对于search insert delete操作, Hash Table的时间复杂度是O(1)。
对于BST(self-balancing Binary Search Tree, 比如 红黑树,AVL树等)时间复杂度是O(LgN)。
看起来Hash Table在所有操作中都要优于BST的。那BST有什么优势呢?
1. 获取所有的有序的key
我们可以从BST树种获取所有的有序的key, 不需要太多额外的操作。 但是没有办法方便的从HashTable中获取到所有的有序key。
2. 范围类的操作
做排序分析,找比某个值大(或小),做范围查询,用BST做是很容易的。 like操作, 排序,也可以用BST搞定。 但是Hast table是做不了的。
3. 实现
BST是很容易实现的, 我们可以用我们自己的方式实现BAST。 但是实现HASH,我们必须要依赖于编程语言提供的类库。
4. 可控
对应BST,所有的操作都可以保证在O(LgN)的时间内完成。 但是对于Hash, 平均时间可能是O(1),但有时是非常耗时的,特别是在table resize的时候。