------------------------------------------------------------------------------------------------------
Java 中的集合框架(
java.util 包下)包含众多用于存储和操作对象的容器类,主要分为 Collection 和 Map 两大体系,此外还有一些特殊用途的集合类。以下是常见集合对象的分类及核心特点:一、Collection 接口(存储单值元素,继承自 Iterable)
1. List(有序、可重复、允许 null)
-
ArrayList
- 底层基于动态数组实现,查询快(随机访问)、增删慢(需移动元素)。
- 初始容量 10,扩容机制为
oldCapacity + (oldCapacity >> 1)(1.5 倍)。 - 线程不安全,适合单线程场景。
-
LinkedList
- 底层基于双向链表实现,增删快(只需修改指针)、查询慢(需遍历)。
- 同时实现了
Deque接口,可作为队列 / 栈使用。 - 线程不安全。
-
Vector
- 底层同 ArrayList(动态数组),但线程安全(方法加
synchronized),性能较差。 - 扩容机制为默认翻倍(可指定增量),已被 ArrayList 替代,不推荐使用。
- 底层同 ArrayList(动态数组),但线程安全(方法加
-
Stack
- 继承自 Vector,基于数组实现的栈(后进先出),线程安全但性能差,推荐用
Deque的push/pop替代。
- 继承自 Vector,基于数组实现的栈(后进先出),线程安全但性能差,推荐用
2. Set(无序、不可重复、允许 null,最多一个)
-
HashSet
- 底层基于 HashMap 实现(元素存于 HashMap 的 key 中),无序,查询 / 增删效率高(O (1))。
- 依赖元素的
hashCode()和equals()保证唯一性,线程不安全。
-
LinkedHashSet
- 继承自 HashSet,底层用 LinkedHashMap 实现,维护插入顺序(通过链表记录元素顺序)。
- 性能略低于 HashSet,适合需要顺序的场景。
-
TreeSet
- 底层基于 红黑树 实现,元素自动排序(自然排序或自定义
Comparator)。 - 查询 / 增删效率为 O (log n),线程不安全。
- 底层基于 红黑树 实现,元素自动排序(自然排序或自定义
3. Queue(队列,FIFO 先进先出,部分支持优先级)
-
ArrayDeque
- 基于循环数组实现的双端队列(
Deque),可作为栈或队列使用,效率高于 LinkedList。 - 无容量限制(自动扩容),线程不安全。
- 基于循环数组实现的双端队列(
-
LinkedList
- 同时实现
Deque接口,可作为双端队列,增删灵活但查询效率低。
- 同时实现
-
PriorityQueue
- 基于小顶堆实现的优先级队列,元素按优先级排序(自然排序或
Comparator),非 FIFO。 - 线程不安全,不允许 null 元素。
- 基于小顶堆实现的优先级队列,元素按优先级排序(自然排序或
-
ConcurrentLinkedQueue
- 线程安全的无界队列,基于链表实现,适合高并发场景(CAS 操作保证安全)。
二、Map 接口(存储键值对 <Key, Value>,Key 唯一)
-
HashMap
- 底层基于数组 + 链表 / 红黑树实现(JDK 8+ 当链表长度 > 8 时转红黑树),无序。
- Key 允许 null(仅一个),Value 允许 null,线程不安全,查询 / 增删效率高(O (1))。
- 初始容量 16,负载因子 0.75,扩容为翻倍。
-
LinkedHashMap
- 继承自 HashMap,底层多了双向链表维护键值对的插入顺序或访问顺序(可用于 LRU 缓存)。
- 性能略低于 HashMap,线程不安全。
-
TreeMap
- 底层基于红黑树实现,Key 自动排序(自然排序或
Comparator)。 - Key 不允许 null,查询 / 增删效率 O (log n),线程不安全。
- 底层基于红黑树实现,Key 自动排序(自然排序或
-
Hashtable
- 古老的哈希表实现,线程安全(方法加
synchronized),但性能差。 - Key 和 Value 均不允许 null,已被
ConcurrentHashMap替代。
- 古老的哈希表实现,线程安全(方法加
-
ConcurrentHashMap
- 线程安全的哈希表,JDK 7 基于分段锁,JDK 8+ 基于 CAS + synchronized 实现,并发性能优异。
- 支持高并发读写,Key 和 Value 不允许 null。
-
WeakHashMap
- Key 为弱引用,当 Key 不再被强引用时,会被 GC 回收,适合缓存场景(如临时数据)。
三、特殊集合(工具类创建)
-
Collections 工具类
Collections.singletonList():不可变单元素 List。Collections.emptyList():空集合(不可变)。Collections.synchronizedList(List):包装为线程安全的 List(同理可包装 Set/Map)。
-
枚举集合
EnumSet:专为枚举类型设计的 Set,底层基于位向量,效率极高。EnumMap:Key 为枚举类型的 Map,底层数组实现,查询快。
四、线程安全集合总结
- List:
Collections.synchronizedList(new ArrayList<>())、CopyOnWriteArrayList(写时复制,适合读多写少)。 - Set:
Collections.synchronizedSet(new HashSet<>())、CopyOnWriteArraySet。 - Map:
ConcurrentHashMap、Collections.synchronizedMap(new HashMap<>())。 - Queue:
ConcurrentLinkedQueue、LinkedBlockingQueue(阻塞队列)、ArrayBlockingQueue(有界阻塞队列)。
选择集合时需关注:是否有序、是否允许重复、线程安全性、增删查效率等,根据场景匹配最合适的实现类。
------------------------------------------------------------------------------------------------------
Java 集合框架的继承关系以
Collection 和 Map 为两大根接口,衍生出众多实现类。以下是核心继承关系图(简化版,突出常用类):一、Collection 体系(单值集合)
plaintext
Iterable (迭代器接口,所有集合的顶层接口)↓
Collection (单值集合根接口)↓
┌───────────┬────────────┬─────────────┐
│ │ │ │
List Set Queue (三大子接口)
│ │ │
│ │ ├─────────────┬─────────────┐
│ │ │ │ │
│ │ Deque BlockingQueue │
│ │ │ │ │
│ │ ArrayDeque LinkedBlockingQueue
│ │ ArrayBlockingQueue
│ │
│ ├────────────┬─────────────┬─────────────┐
│ │ │ │ │
│ HashSet LinkedHashSet TreeSet EnumSet
│
├───────────┬────────────┬─────────────┐
│ │ │ │
ArrayList LinkedList Vector Stack(已过时)│CopyOnWriteArrayList(线程安全)
二、Map 体系(键值对集合)
plaintext
Map (键值对集合根接口)↓
┌───────────┬────────────┬─────────────┬─────────────┐
│ │ │ │ │
HashMap LinkedHashMap TreeMap Hashtable WeakHashMap
│ │
│ Properties(继承自Hashtable,用于配置文件)
│
ConcurrentHashMap(线程安全)
│
EnumMap(键为枚举类型)
关键说明:
Iterable:所有集合的顶层接口,提供iterator()方法,支持增强 for 循环(for-each)。Collection:单值集合的根接口,定义了增删改查等通用方法(如add()、remove()、size())。List:有序、可重复,允许 null(如ArrayList基于数组,LinkedList基于链表)。Set:无序、不可重复,最多一个 null(如HashSet基于 HashMap,TreeSet基于红黑树排序)。Queue:队列(FIFO),子接口Deque支持双端操作(如ArrayDeque可作栈 / 队列)。Map:键值对集合,键唯一(如HashMap线程不安全,ConcurrentHashMap线程安全)。
通过继承关系可快速理解集合的特性(如
LinkedHashSet 继承 HashSet 并维护顺序,TreeMap 实现排序功能)。------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------