一、 集合
1、HashMap时间复杂度
-
put()
时间复杂度- 若不存在hash冲突,则找到通过hash值找到数组对应的位置,直接存储即可,时间复杂度为
O(1)
- 若存在hash冲突,当前下标的多个值是以链表形式存储,则先遍历该链表,以确保当前的key值唯一,而后再向其中添加对应的值,时间复杂度为
O(n)
(n为当前链表中元素个数) - 若当前的下标的多个值是以树形式存储,则先遍历该树,查找是否能找到对应的key,否则直接进行存储即可,时间复杂度为
O(log n)
- 若不存在hash冲突,则找到通过hash值找到数组对应的位置,直接存储即可,时间复杂度为
-
get()
时间复杂度
该方法的时间复杂度与put()
有很大关系。因而简单进行芬妮下- 若不存在hash冲突,时间复杂度为
O(1)
- 若存在hash冲突,时间复杂度为
O(n)
或O(log n)
根据当前链表或树的中元素个数n
- 若不存在hash冲突,时间复杂度为
2、LinkedHashMap时间复杂度
put()
时间复杂度
Java没有重写该方法,只是实现了上述提到的afterNodeAccess()
和afterNodeInsection()
方法。afterNodeAccess()
的通过LinkedHashMap.Entry<K,V> p = (LinkedHashMap.Entry<K,V>)e
语句,将当前链表转换为LinkedHashMap对应的链表,因而可以很快能从单链表中找到对应的值,并插入到LinkedList的对应位置,因而该方法的时间复杂度为O(1)afterNodeInsection()
方法是用于linkedHashMap中最先加入链表的元素,首先hashMap中对应元素的位置,而后将其删除,因而该方法的时间复杂度跟hashMap中get()类似,时间复杂度为O(1) + O(n) 或 O(log n)
get()
时间复杂度
- 该方法主要有
afterNodeAccess()
决定,因而时间复杂度为O(1),但是因为在该方法执行之前执行了getNode()
方法用于查找LinkedHashMap
中是否存在该key,因而总时间复杂度为O(n) 或 O(log n)
- 该方法主要有