Java 集合框架提供了丰富的数据结构用于存储和操作数据。常用集合可以分为以下几类:
实现类 | 特点 | 是否线程安全 |
---|
ArrayList | 底层数组结构,随机访问快,插入/删除慢 | 否 |
LinkedList | 底层双向链表,插入/删除快,随机访问慢 | 否 |
Vector | 与 ArrayList 类似,但线程安全(同步) | 是 |
Stack | LIFO 栈结构,继承自 Vector | 是 |
实现类 | 特点 | 是否有序 | 是否线程安全 |
---|
HashSet | 基于 HashMap ,不保证顺序 | 否 | 否 |
LinkedHashSet | 基于 LinkedHashMap ,按插入顺序排序 | 是 | 否 |
TreeSet | 基于红黑树,自动排序(可指定排序规则) | 是 | 否 |
CopyOnWriteArraySet | 线程安全,适用于读多写少 | 是 | 是 |
实现类 | 特点 | 用途 |
---|
LinkedList | 也实现了 Queue 接口,可做队列/双端队列 | 通用队列 |
PriorityQueue | 优先级队列,自动根据优先级排序 | 任务调度 |
ArrayDeque | 双端队列,性能优于 Stack/LinkedList | 栈、队列 |
实现类 | 特点 | 是否有序 | 是否线程安全 |
---|
HashMap | 基于哈希表,键不能重复,允许 null,性能好 | 否 | 否 |
LinkedHashMap | 维护插入顺序,适合需要顺序访问的场景 | 是 | 否 |
TreeMap | 基于红黑树,按 Key 排序,支持范围查找 | 是 | 否 |
Hashtable | 早期线程安全实现,效率低 | 否 | 是 |
ConcurrentHashMap | 分段锁设计,线程安全,高并发 | 否 | 是 |
ConcurrentSkipListMap | 基于跳表,有序,支持并发,适合区间检索/延迟队列等场景 | 是 | 是 |
WeakHashMap | Key 为弱引用,适合做缓存 | 否 | 否 |
IdentityHashMap | 使用 == 判断 Key 是否相等 | 否 | 否 |
EnumMap | 专门为枚举类型 Key 设计,内部为数组实现 | 是 | 否 |
工具类 | 功能简介 |
---|
Collections | 提供排序、同步包装、常用操作的工具方法 |
Arrays | 针对数组的静态工具类 |
Collectors | Java 8 中用于将流收集为集合的工具类 |
需求 | 推荐集合 |
---|
并发 Map(无序) | ConcurrentHashMap |
并发 Map(有序) | ConcurrentSkipListMap |
并发 List(读多写少) | CopyOnWriteArrayList |
并发 Set(读多写少) | CopyOnWriteArraySet |
并发队列 | ConcurrentLinkedQueue |
延迟任务调度/定时队列 | DelayQueue , ScheduledExecutorService |
需求 | 推荐集合 |
---|
快速查找,无顺序,无重复 | HashSet |
有插入顺序,唯一性 | LinkedHashSet |
自动排序,无重复元素 | TreeSet |
动态数组结构,随机访问快 | ArrayList |
经常增删元素 | LinkedList |
线程安全的 map | ConcurrentHashMap |
可排序且线程安全的 map | ConcurrentSkipListMap |
提示:
- List 和 Set 都继承自 Collection。
- Map 不属于 Collection 接口体系。
- 如果你在多线程中使用非线程安全的集合,可以用
Collections.synchronizedXXX()
包装。