mirror of
https://github.com/Estom/notes.git
synced 2026-04-24 10:34:11 +08:00
4.1 KiB
4.1 KiB
准备知识
数据结构分为
- 线性数据结构
- 树型数据结构
- 图型数据结构
C++中的容器分为(都是线性的)
- 顺序容器
- array 数组
- vector向量
- list 链表
- 关联容器
- map 映射
- set 集合
- 容器适配器
- stack 栈
- queue 队列
Java中的集合容器分为单列集合collection和双列映射Map。除了一下基本集合类型,还有多个特殊的类型,后续补充
- List
- Arraylist,有序,插入序
- vector
- stack
- Queue
- linkedlist,双端队列有序,插入序
- arrayqueue,有序,插入序
- priorityQueue,有序,自然序
- Set
- hashset,无序
- linkedhashset,有序,插入序
- treeSet,有序,自然序
- Map
- hashmap,无序
- linkedhashmap,有序,插入序
- treemap 有序,自然序
体系
- Java 集合 -
List - Java 集合 -
Set - Java 集合 -
Map - Java 集合 -
Iterator/ListIterator Comparable和Comparator接口- 集合面试问题
集合框架总览
- 集合框架提供了两个遍历接口:
Iterator和ListIterator,其中后者是前者的优化版,支持在任意一个位置进行前后双向遍历。注意图中的Collection应当继承的是Iterable而不是Iterator,后面会解释Iterable和Iterator的区别 - 整个集合框架分为两个门派(类型):
Collection和Map,前者是一个容器,存储一系列的对象;后者是键值对<key, value>,存储一系列的键值对 - 在集合框架体系下,衍生出四种具体的集合类型:
Map、Set、List、Queue Map存储<key,value>键值对,查找元素时通过key查找valueSet内部存储一系列不可重复的对象,且是一个无序集合,对象排列顺序不一List内部存储一系列可重复的对象,是一个有序集合,对象按插入顺序排列Queue是一个队列容器,其特性与List相同,但只能从队头和队尾操作元素- JDK 为集合的各种操作提供了两个工具类
Collections和Arrays,之后会讲解工具类的常用方法 - 四种抽象集合类型内部也会衍生出许多具有不同特性的集合类,不同场景下择优使用,没有最佳的集合
对比
章节结束各集合总结:(以 JDK1.8 为例)
| 数据类型 | 插入、删除时间复杂度 | 查询时间复杂度 | 底层数据结构 | 是否线程安全 |
|---|---|---|---|---|
| Vector | O(N) | O(1) | 数组 | 是(已淘汰) |
| ArrayList | O(N) | O(1) | 数组 | 否 |
| LinkedList | O(1) | O(N) | 双向链表 | 否 |
| HashSet | O(1) | O(1) | 数组+链表+红黑树 | 否 |
| TreeSet | O(logN) | O(logN) | 红黑树 | 否 |
| LinkedHashSet | O(1) | O(1)~O(N) | 数组 + 链表 + 红黑树 | 否 |
| ArrayDeque | O(N) | O(1) | 数组 | 否 |
| PriorityQueue | O(logN) | O(logN) | 堆(数组实现) | 否 |
| HashMap | O(1) ~ O(N) | O(1) ~ O(N) | 数组+链表+红黑树 | 否 |
| TreeMap | O(logN) | O(logN) | 数组+红黑树 | 否 |
| HashTable | O(1) / O(N) | O(1) / O(N) | 数组+链表 | 是(已淘汰) |



