总结

1,178 阅读2分钟

一、 集合

1、HashMap时间复杂度

  • put() 时间复杂度

    • 若不存在hash冲突,则找到通过hash值找到数组对应的位置,直接存储即可,时间复杂度为O(1)
    • 若存在hash冲突,当前下标的多个值是以链表形式存储,则先遍历该链表,以确保当前的key值唯一,而后再向其中添加对应的值,时间复杂度为O(n)(n为当前链表中元素个数)
    • 若当前的下标的多个值是以树形式存储,则先遍历该树,查找是否能找到对应的key,否则直接进行存储即可,时间复杂度为O(log n)
  • get()时间复杂度
    该方法的时间复杂度与put()有很大关系。因而简单进行芬妮下

    • 若不存在hash冲突,时间复杂度为O(1)
    • 若存在hash冲突,时间复杂度为O(n)O(log n)根据当前链表或树的中元素个数n

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)