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