Skip to content

Java 集合的整个体系和继承关系

约 1054 字大约 4 分钟

Java基础美团

2025-03-26

⭐ 题目日期:

美团 - 2024/12/23

📝 题解:

Java 集合体系与继承关系详解

Java 集合框架(Java Collections Framework,JCF)是Java中用于存储和操作数据组的核心工具,包含丰富的接口和实现类。其核心分为 单列集合(Collection)键值对集合(Map) 两大分支,以下是完整的体系结构和继承关系:

一、Collection 接口(单列集合)

存储单个元素,分为三大子接口:ListSetQueue

1. List 接口(有序,可重复)

特点:元素按插入顺序排列,允许重复。 • 实现类: • ArrayList:基于动态数组,查询快(O(1)),增删慢(需移动元素)。 • LinkedList:基于双向链表,增删快(O(1)),查询慢(O(n))。 • Vector(过时):线程安全的动态数组,性能差,建议用 Collections.synchronizedListCopyOnWriteArrayList 替代。 • Stack(过时):继承自 Vector,实现栈结构(LIFO)。

2. Set 接口(无序,不可重复)

特点:元素唯一,不保证顺序。 • 实现类: • HashSet:基于哈希表,插入/查询快(O(1)),无序。 • LinkedHashSet:在 HashSet 基础上维护插入顺序的双向链表。 • TreeSet:基于红黑树,元素按自然顺序或自定义比较器排序(O(log n))。

3. Queue 接口(队列)

特点:先进先出(FIFO)或其他特定顺序。 • 实现类: • LinkedList:同时实现 Deque(双端队列),支持两端操作。 • PriorityQueue:基于堆的优先级队列,元素按优先级排序。 • ArrayDeque:基于循环数组的双端队列,高效实现栈和队列。


二、Map 接口(键值对集合)

存储键值对(Key-Value),键唯一,值可重复。

1. 非线程安全实现

HashMap:基于哈希表,允许 null 键/值,无序。 • LinkedHashMap:在 HashMap 基础上维护插入顺序或访问顺序(LRU缓存)。 • TreeMap:基于红黑树,键按自然顺序或自定义比较器排序(O(log n))。 • IdentityHashMap:使用 == 比较键的哈希表,适用于特殊场景。 • WeakHashMap:键为弱引用,GC回收键时自动删除条目(适合缓存)。

2. 线程安全实现

Hashtable(过时):线程安全的哈希表,性能差,建议用 ConcurrentHashMap 替代。 • ConcurrentHashMap:分段锁(JDK7)或 CAS + synchronized(JDK8+)实现高并发。 • ConcurrentSkipListMap:基于跳表,支持并发有序访问。


三、工具类与扩展集合

1. 工具类

Collections:提供集合排序、同步化、不可变包装等方法。 • synchronizedList(List<T> list):将集合转为线程安全版本。 • unmodifiableList(List<? extends T> list):返回不可变集合。

2. 并发集合(java.util.concurrent)

CopyOnWriteArrayList:写时复制的线程安全 List,适合读多写少场景。 • BlockingQueue:阻塞队列接口,实现类包括 ArrayBlockingQueueLinkedBlockingQueue 等。 • ConcurrentLinkedQueue:基于 CAS 的无界非阻塞队列。

3. 其他特殊集合

EnumSet:专为枚举类型设计的高效集合。 • BitSet:位向量,用于高效存储布尔值数组。


四、继承关系与实现层次

Collection 接口继承树

Collection
├── List
│   ├── ArrayList
│   ├── LinkedList
│   └── Vector → Stack
├── Set
│   ├── HashSet → LinkedHashSet
│   └── TreeSet
└── Queue
    ├── LinkedList
    ├── PriorityQueue
    └── Deque → ArrayDeque

Map 接口继承树

Map
├── HashMap → LinkedHashMap
├── TreeMap
├── WeakHashMap
├── IdentityHashMap
├── Hashtable
└── ConcurrentHashMap

五、核心区别与适用场景

集合类型底层实现特点适用场景
ArrayList动态数组查询快,增删慢频繁随机访问,数据量稳定
LinkedList双向链表增删快,查询慢频繁插入/删除,实现栈/队列
HashSet哈希表无序,去重快速判断元素是否存在
TreeSet红黑树有序,去重需要排序或范围查询
HashMap哈希表高效查询,允许 null 键/值大多数键值对存储场景
ConcurrentHashMap分段锁/CAS高并发安全多线程环境下的键值存储

六、总结

List:有序可重复,按索引访问,根据增删/查询频率选择 ArrayListLinkedList。 • Set:无序唯一,根据排序需求选择 HashSet(无序)或 TreeSet(有序)。 • Map:键值对存储,优先用 HashMap,高并发场景用 ConcurrentHashMap。 • 线程安全:避免使用 Vector/Hashtable,优先选择并发包中的集合类。

理解集合体系的设计思想和性能特点,能帮助开发者针对不同场景选择最优解决方案。