Java中的集合类有哪些?如何分类的?
面试考察点
体系结构认知:面试官不仅仅想知道你能背出几个集合类名,更想考察你是否理解 Java 集合框架的整体设计思想,能否从接口到实现有一个清晰的层次认知。
选型能力:考察你是否了解不同集合类的特性差异,能否根据实际场景(有序、唯一、排序、线程安全等)选择合适的实现类。
深度与广度:这道题是 "开门题",面试官通常会根据你的回答深入追问某个具体集合的原理,比如 HashMap 的扩容机制、ConcurrentHashMap 的线程安全实现等。
核心答案
Java 集合框架主要分为 两大体系:Collection 和 Map。
上图展示了 Java 集合框架的整体架构,分为两大核心体系:
Collection 体系:存储单列元素,根据特性细分为 List(有序可重复)、Set(无序唯一)、Queue(队列)三大接口。
Map 体系:存储键值对(Key-Value),通过 Key 快速查找 Value,Key 必须唯一。
深度解析
一、Collection 体系详解
1. List 接口 - 有序可重复
实现类
底层结构
线程安全
特点
适用场景
ArrayList
动态数组
❌
查询 O(1),尾部增删 O(1)
大多数场景首选
LinkedList
双向链表
❌
头部增删 O(1),查询 O(n)
频繁头部增删
Vector
动态数组
✅
全表 synchronized 锁
已淘汰
Stack
动态数组
✅
继承 Vector,后进先出
已淘汰,用 ArrayDeque
2. Set 接口 - 无序唯一
实现类
底层结构
有序性
特点
HashSet
哈希表
❌ 无序
性能最高,基于 HashMap
LinkedHashSet
哈希表 + 链表
✅ 插入有序
保持插入顺序
TreeSet
红黑树
✅ 排序有序
支持自然排序或自定义排序
3. Queue 接口 - 队列
实现类
类型
特点
LinkedList
双端队列
可作为队列、栈、列表使用
ArrayDeque
双端队列
循环数组实现,性能优于 LinkedList
PriorityQueue
优先队列
按优先级出队,非线程安全
ArrayBlockingQueue
阻塞队列
有界,线程安全,生产者消费者模型
LinkedBlockingQueue
阻塞队列
可选有界/无界,线程安全
二、Map 体系详解
实现类
底层结构
线程安全
null 键/值
特点
HashMap
数组 + 链表/红黑树
❌
✅/✅
最常用,性能最高
LinkedHashMap
HashMap + 双向链表
❌
✅/✅
保持插入顺序或 LRU 顺序
TreeMap
红黑树
❌
❌/✅
按键排序,支持范围查询
Hashtable
数组 + 链表
✅
❌/❌
全表锁,已淘汰
ConcurrentHashMap
数组 + 链表/红黑树
✅
❌/❌
高并发首选,细粒度锁
WeakHashMap
弱引用哈希表
❌
✅/✅
Key 可被 GC 回收
三、如何选择合适的集合
四、常见误区
误区一:Vector 和 Hashtable 还在生产使用
// ❌ 错误:使用过时的同步集合
List
Map
// ✅ 正确:使用并发包中的集合
List
Map
误区二:HashSet 真的 "无序" 吗?
HashSet 的 "无序" 指的是不保证插入顺序,但实际遍历顺序由哈希值决定,在同一次运行中顺序是稳定的。
误区三:LinkedList 比 ArrayList 插入快?
只有在头部插入时 LinkedList 才更快,尾部插入 ArrayList 更快(无指针开销),中间插入两者都是 O(n)。
面试高频追问
ArrayList 和 LinkedList 的区别?
底层结构、时间复杂度、内存占用、适用场景
HashMap 的底层原理?
数组 + 链表 + 红黑树,扩容机制,哈希冲突解决
ConcurrentHashMap 如何保证线程安全?
JDK 7 分段锁 vs JDK 8 CAS + synchronized
常见面试变体
"List、Set、Map 三者的区别?"
"哪些集合是线程安全的?"
"如何选择使用哪个集合类?"
记忆口诀
Collection 三剑客:
List:有序可重复,像排队
Set:无序要唯一,像身份证号
Queue:先进先出,像排队买票
Map 选择口诀:
单线程用 HashMap
要排序用 TreeMap
要顺序用 LinkedHashMap
多线程用 ConcurrentHashMap
总结
Java 集合框架分为 Collection(单列)和 Map(双列)两大体系。Collection 下分 List(有序可重复)、Set(无序唯一)、Queue(队列)三类;Map 存储键值对,核心实现包括 HashMap、LinkedHashMap、TreeMap、ConcurrentHashMap。选型时根据 "有序性、唯一性、线程安全、排序需求" 四个维度判断,日常开发 ArrayList + HashMap 覆盖 90% 场景。