- 在Collection中查找指定元素是否存在,用HashSet: add() remove() contains() 全部o(1)
- 在Collection中查找指定元素是否存在,并通过该元素A找B,用HashMap: put(k,v) remove(k) containsKey(k) get(k) 全部o(1)
- 加在尾,删在尾,看在尾,用Stack: push() pop() peek() 全部o(1)
- 加在尾,删在头,看在头,用Queue: add() remove() peek() 全部o(1)
- 加在头,删在头,看在头,加在尾,删在尾,看在尾, 用Deque 全部o(1)
二分查找法 O(lgn)
寻找数组中的最大/最小 O(n)
最大/最小 | 加入新元素 | 删除极值 | 删除指定元素 | 查找指定元素 | 查找极值 |
---|---|---|---|---|---|
B.S.T | o(lgn) | o(lgn) | o(lgn) | o(lgn) | o(lgn) 两头 |
Heap | o(lgn) | o(lgn) | o(n) | o(n) | o(1)一头 |
PriorityQueue<T> heap = new PriorityQueue<>((o1,o2)-> expression); 允许重复
加入( -: o1 前 o2 后 +:o2 前 o1后 0:前后无所谓 )
删除(与comparator无关,用的iterator 和equals() )
TreeMap<K,V> bst = new TreeMap<>((o1,o2)-> expression); 不允许重复
TreeSet<T> bst = new TreeSet<>((o1,o2)-> expression); 不允许重复
加入( -: o1 前 o2 后 +:o2 前 o1后 0:不加/替换)
删除( -: o1 前 o2 后 +:o2 前 o1后 0:找到了)
空间复杂度
- 多开一个辅助的数组: O(n)
- 多开一个辅助的二维数组: O(n^2)
- 多开常数空间: O(1)
- 递归调用中,递归的深度是多少,递归过程所占的空间复杂度就是多少
怎样测出一个method的执行时间?
long startTime = System.nanoTime();
methodToTime();
long endTime = System.nanoTime();
long duration = (endTime - startTime); //divide by 1000000 to get milliseconds.