映射基於底層實現不同,而造成的性能不同
- 基於鏈表的映射
- 基於二分搜索樹的映射
method | LinkedListMap | BSTMap | BST[avr Time] | worst |
---|---|---|---|---|
增add | O(n) | O(h) | O(logn) | O(n) |
刪remove | O(n) | O(h) | O(logn) | O(n) |
改set | O(n) | O(h) | O(logn) | O(n) |
查get | O(n) | O(h) | O(logn) | O(n) |
查contains | O(n) | O(h) | O(logn) | O(n) |
h指代的是二分搜索樹的deepth
- 需要注意的是:在BST最壞的情況下【不考慮AVL】,是隻有一個分支的樹形結構,時間複雜度也爲O(n)
在滿二叉樹的情況下,h與節點n之間的關係。
N = 2^h-1
h = log_2(n+1)
O(h)=O(log_2(n))=O(log(n))
二分搜索樹最多只需要查找其深度個節點就可以查詢到相應位置。
時間複雜度分析
logn的複雜度是非常快的
Data Size | logn | n | Gap |
---|---|---|---|
n = 16 | 4 | 16 | 4倍 |
n=1024 | 10 | 1024 | 100倍 |
n=100w | 20 | 100w | 5w倍 |
所以需要再需要引入avl平衡二叉樹
- 有序映射:基於搜索樹實現【avl】
- 無序映射:基於hash表實現【hashMap】
- 實際情況下無序映射不會使用鏈表實現