映射基于底层实现不同,而造成的性能不同
- 基于链表的映射
- 基于二分搜索树的映射
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】
- 实际情况下无序映射不会使用链表实现