JAVA (list、set、map)时间复杂度和使用场景汇总

学习参考:

https://www.cnblogs.com/alex-xyl/p/11460931.html

  类型 底层结构 重复 null值 使用场景 备注 查询 删除 增加
List ArrayList 动态数组 可重复 允许 快速随机访问元素   0(1) 0(n) 尾部增加0(1),中部增加0(n)
LinkList 双向链表 可重复 允许 需要快速插入,删除元素   0(n) 0(1) 尾部增加0(1),中部增加0(n)
Set HashSet 数组+(链表、红黑树) 不可重复 允许 不要求顺序,且没有重复元素 重写hsahCode、equlas O(log n) O(log n) O(log n)
TreeSet 红黑树 不可重复 不允许 要求顺序,且没有重复元素 重写comparato() O(log n) O(log n) O(log n)
LinkedHashSet (数组+(链表、红黑树))+链表 不可重复 允许 有特定输出顺序,且没有重复元素   O(1) O(1) O(1)
Map HashMap 数组+(链表、红黑树) key不可重复 允许 键值存取,而且不要求顺序 时间复杂度平均能达到O(1)。正常是O(1)到O(n) jdk1.8添加了 红黑树 是 O(log n) O(log n) O(log n) O(log n)
TreeMap 红黑树 key不可重复 不允许 键值存取值,而且要求顺序 重写comparato() O(log n) O(log n) O(log n)
LinkedHashMap (数组+(链表、红黑树))+链表 key不可重复 允许 有特定输出顺序键,键值存取   O(1) O(1) O(1)

猜你喜欢

转载自blog.csdn.net/qq_37203082/article/details/112915785